考虑以下字符串和我正在使用的正则表达式:
start match the target if stop appears before the next start
(?<=start.*)target(?=.*stop)
我匹配单词target
,如果它出现在单词start
之后和单词stop
之前。但是,我需要知道如何修改前瞻,以便target
只有在start
和target
之间没有出现另一个单词stop
时才会匹配start don't match the target if the next start appears before stop
。例如,以下字符串不应导致匹配:
stop
如果有以下start
但下次出现start match the target if stop appears afterward without a next occurrence
,则还需要匹配:
{{1}}
答案 0 :(得分:1)
您可以像这样修改正则表达式:
(?<=start.*)target(?=(?:(?!start).)*stop)
如果在start
和target
之间显示单词stop
,则匹配将失败。
((?!start).)*
是否定前瞻,这意味着如果该字符不是后跟start
,则匹配0或更多任何字符(点)由(?!start)
表示,然后((?!start).)*
基本上在点后面放置量词*
。因此,简而言之.*
已被((?!start).)*