Мне нужно регулярное выражение для сопоставления строки следующим образом:
- Должен начинаться с
[
- Должен содержать
]
- Разрешено иметь любые символы (включая пробелы) между
[
и ]
- Должен содержать хотя бы один символ от
[
до ]
- Разрешено иметь
;
после ]
. После ;
разрешены все символы (хотя это и неважно, поскольку меня это не волнует)
- Если и только если a
;
после ]
присутствует, пробелы (читайте табуляции, пробелы - хотя я могу гарантировать, что \r\n\f\v
не будет, поэтому я и использовал \s
ниже) допускаются между ]
и ;
. Если ;
отсутствует после ]
, тогда ]
должен быть концом строки.
Я получил следующее регулярное выражение, которое прошло все мои начальные тесты: ^\[([^]]+)](?:\s+?;)?
.
Скорость является ключевым моментом здесь, поэтому я надеюсь улучшить имеющееся у меня регулярное выражение, чтобы по возможности сбрить несколько циклов.
Я не совсем уверен, было ли здесь полезно использовать lookahead.
EDIT
например:
[some;thing]
- Действительный, с группой захвата some;thing
[something]
- Действительный, с группой захвата something
[something]
- недействительно, не начинается с [
[something] ;ojasodj
- Действительный, группа захвата something
[something]
- Неверно, пробел после ]
без ;
настоящего
[something];
- Действительный, группа захвата something
[]
- Неверно, должен содержать хотя бы один символ от [
до ]