【问题标题】:Assert Specific Word Exists Before Another Specific Word in a Lookahead在前瞻中断言特定单词存在于另一个特定单词之前
【发布时间】:2015-03-10 15:00:22
【问题描述】:

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

start match the target if stop appears before the next start

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

如果 target 出现在单词 start 之后和单词 stop 之前,我将匹配它。但是,我需要知道如何修改前瞻,以使 target 仅在 start 没有出现在 targetstop 之间时才匹配。例如,以下字符串不应导致匹配:

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

【问题讨论】:

    标签: .net regex


    【解决方案1】:

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

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

    如果start 出现在targetstop 之间,则匹配失败。

    ((?!start).)* 是一个负前瞻,这意味着匹配0个或多个任何字符(点),如果该字符后跟start,由@987654327表示@,然后((?!start).)* 基本上是将量词* 放在点之后。所以简而言之.*已经被((?!start).)*取代了

    【讨论】:

    • 谢谢。效果很好。您是否介意添加一些关于您添加的 (?:(?!start).)* 位的解释,只是为了帮助我了解它是如何工作的?
    • 我在回答中添加了一些解释。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-09
    • 1970-01-01
    • 1970-01-01
    • 2013-05-19
    • 2010-12-22
    • 2022-08-02
    • 1970-01-01
    相关资源
    最近更新 更多