我的正则表达式问题是
方括号之间的文本以字符串
开头'Started'
及其之后,但括号之间不存在字符串
'Continue'
答案 0 :(得分:1)
经过编辑以适合您所澄清的问题。
如果我正确理解了您的问题,这应该可以工作。
\[(?![^][]*\bContinue\b)Started[^][]*\]
说明:
[^][]*
而不是.*
在方括号内。(?![^][]*\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)