检查正则表达式子模式是否包含先前的子模式?

时间:2012-03-29 17:41:26

标签: regex recursion

我想知道是否有办法检查给定序列的子模式匹配,以便我可以阻止它。

例如,假设我想捕获除了重复早期捕获之外的所有内容。因此,如果我有句子[word plus word],则以下内容应捕获所有内容(word plus),直到第二次出现word

(\w+)[^\1]+

第一个(\w+)捕获word。第二个[^...]捕获组尝试排除它(它是前面捕获的\1),但它只适用于字符 - 而不是子模式捕获。

那么无论如何都要这样做?

2 个答案:

答案 0 :(得分:9)

你可以使用这样的模式:

(\w+)(?:(?!\1).)*

使用负前瞻来断言(在每个字符处)先前匹配的单词不包含在子表达式中。

答案 1 :(得分:1)

您可以使用延迟量词和外观,如下所示:

(\w+).*?(?=\1)

你可能还想用这样的词边界包围w +:

\b(\w+)\b.*?(?=\1)

所以你不匹配这样的东西:你好,你会匹配“ll”