Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 检查正则表达式子模式是否不包含以前的子模式?_Regex_Recursion - Fatal编程技术网

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

Regex 检查正则表达式子模式是否不包含以前的子模式?,regex,recursion,Regex,Recursion,我想知道是否有一种方法可以检查给定序列的子模式匹配,以便阻止它 例如,假设我想要捕捉所有的东西,除了先前捕捉的重复。因此,如果我有一个句子[word plus word],那么下面的句子应该能够捕捉到第二次出现word之前的所有内容(word plus) (\w+)[^\1]+ 第一个(\w+捕获word。第二个[^…]捕获组尝试将其排除(它是前面捕获的\1),但它只对字符有效,而不对子模式捕获有效 那么还有什么方法可以做到这一点呢?您可以使用如下模式: (\w+)(?:(?!\1).)*

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

例如,假设我想要捕捉所有的东西,除了先前捕捉的重复。因此,如果我有一个句子
[word plus word]
,那么下面的句子应该能够捕捉到第二次出现
word
之前的所有内容(
word plus

(\w+)[^\1]+
第一个
(\w+
捕获
word
。第二个
[^…]
捕获组尝试将其排除(它是前面捕获的
\1
),但它只对字符有效,而不对子模式捕获有效


那么还有什么方法可以做到这一点呢?

您可以使用如下模式:

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

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

您可以使用惰性量词和前视,如下所示:

(\w+)(?:(?!\1).)*
(\w+).*?(?=\1)
\b(\w+)\b.*?(?=\1)
您可能还希望用如下单词边界环绕w+:

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

这样你就不会匹配这样的东西:您好,在哪里匹配“ll”

就是这样,你需要更多的分数。这个答案我已经用了很多次了<代码>(\w+).*(?!\1)无法正常工作,在
foo barfoo
中,当需要
foo bar
时,它将匹配
foo
。也许你的意思是
(\w+).*(?=\1 |$)