正则表达式:方括号之间存在一个字符串,不存在另一个字符串

时间:2019-07-06 20:02:54

标签: regex regex-lookarounds regex-group regex-greedy

我的正则表达式问题是

方括号之间的文本以字符串

开头
'Started' 

及其之后,但括号之间不存在字符串

'Continue'

3 个答案:

答案 0 :(得分:1)

经过编辑以适合您所澄清的问题。

如果我正确理解了您的问题,这应该可以工作。

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

Demo

说明:

  • 在方括号的开头和结尾处使用方括号,但使用[^][]*而不是.*在方括号内。
  • (?![^][]*\bContinue\b)确保括号内没有孤立的“继续”。我把它放在您的问题中不清楚“开始”必须在开头的地方,您可以将其移到“开始”之后并获得相同的结果。
  • Started[^][]*匹配方括号之间的所有内容,只要它以“ Started”开头即可。如果要在方括号内的任意位置“开始” ,请改用[^][]*Started[^][]*

答案 1 :(得分:1)

可能更快的方法是:

\[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

答案 2 :(得分:0)

我的猜测是该表达式可能与您想要的表达式很接近:

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

Demo