我想知道是否有办法检查给定序列的子模式匹配,以便我可以阻止它。
例如,假设我想捕获除了重复早期捕获之外的所有内容。因此,如果我有句子[word plus word]
,则以下内容应捕获所有内容(word plus
),直到第二次出现word
。
(\w+)[^\1]+
第一个(\w+)
捕获word
。第二个[^...]
捕获组尝试排除它(它是前面捕获的\1
),但它只适用于字符 - 而不是子模式捕获。
那么无论如何都要这样做?
答案 0 :(得分:9)
你可以使用这样的模式:
(\w+)(?:(?!\1).)*
使用负前瞻来断言(在每个字符处)先前匹配的单词不包含在子表达式中。
答案 1 :(得分:1)
您可以使用延迟量词和外观,如下所示:
(\w+).*?(?=\1)
你可能还想用这样的词边界包围w +:
\b(\w+)\b.*?(?=\1)
所以你不匹配这样的东西:你好,你会匹配“ll”