断言特定单词存在于前瞻中的另一个特定单词之前

时间:2015-03-10 15:00:22

标签: .net regex

考虑以下字符串和我正在使用的正则表达式:

start match the target if stop appears before the next start

(?<=start.*)target(?=.*stop)

我匹配单词target,如果它出现在单词start之后和单词stop之前。但是,我需要知道如何修改前瞻,以便target只有在starttarget之间没有出现另一个单词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}}

1 个答案:

答案 0 :(得分:1)

您可以像这样修改正则表达式:

(?<=start.*)target(?=(?:(?!start).)*stop)

如果在starttarget之间显示单词stop,则匹配将失败。

((?!start).)*否定前瞻,这意味着如果该字符不是后跟start,则匹配0或更多任何字符(点)由(?!start)表示,然后((?!start).)*基本上在点后面放置量词*。因此,简而言之.*已被((?!start).)*

取代