регулярное выражение: между квадратными скобками существует одна строка, а не существует другая - PullRequest
0 голосов
/ 06 июля 2019

Мой вопрос о регулярном выражении:

Между квадратными скобками текст начинается со строки

'Started' 

и после нее, но между скобками не существует строка

'Continue'

Ответы [ 3 ]

1 голос
/ 07 июля 2019

Вероятно, более быстрый способ сделать это заключается в следующем:

\[Started(?:[^\]]*?\bContinue\b(*SKIP)(*FAIL)|[^\]]*\])

https://regex101.com/r/ZCmv1Y/1

Расширенный

 \[Started
 (?:
      [^\]]*? \b Continue \b (*SKIP) (*FAIL) 
   |  
      [^\]]* 
      \]
 )

Эталонный тест

Regex1:   \[Started(?:[^\]]*?\bContinue\b(*SKIP)(*FAIL)|[^\]]*\])
Completed iterations:   50  /  50     ( x 1000 )
Matches found per iteration:   3
Elapsed Time:    0.93 s,   926.22 ms,   926218 µs
Matches per sec:   161,948


Regex2:   \[(?![^][]*?\bContinue\b)Started[^][]*\]
Completed iterations:   50  /  50     ( x 1000 )
Matches found per iteration:   3
Elapsed Time:    1.21 s,   1212.55 ms,   1212546 µs
Matches per sec:   123,706
1 голос
/ 06 июля 2019

Отредактировано в соответствии с вашим уточненным вопросом.

Это должно работать, если я правильно понял ваш вопрос.

\[(?![^][]*\bContinue\b)Started[^][]*\]

Демонстрация

Объяснение:

  • Квадратные скобки в начале и конце, но ни один внутри, используя [^][]* вместо .*.
  • (?![^][]*\bContinue\b), убедитесь, чтов скобках нет изолированного «Продолжить».Я поставил это там, где это было, когда в вашем вопросе не было ясно, что «Начато» должно быть в начале - вы можете переместить его после «Начато» и получить те же результаты.
  • Started[^][]* совпаденийчто-нибудь между квадратными скобками, пока оно начинается с «Начато».Если вы хотите, чтобы «Начато» в любом месте внутри квадратных скобок, вместо этого используйте [^][]*Started[^][]*.
0 голосов
/ 06 июля 2019

Я предполагаю, что это выражение может быть близко к тому, что вы можете захотеть:

(?=^\[\bStarted\b(?!.*\bContinue\b).*\]).*

Демо

...