带有标点符号的重复单词的正则表达式

时间:2008-10-17 20:53:16

标签: regex

我想要做的是检查彼此相邻的重复单词,但即使两者之间存在标点符号。

例如:

Vivamus Vivamus diam, diam, Vivamus Vivamus diam, diam Vivamus

这里应该有4个不同的点击。

我无法弄清楚为什么这不起作用;有人可以解释原因,并告诉我正确的代码应该是什么?

感谢。

(\w*(?:[ ,\.])*?)\1

PS:由于它引起的混乱,我不会说我正在使用Perl引擎。

3 个答案:

答案 0 :(得分:8)

(?:是一个非捕获括号,意味着它不会存储匹配项。您需要使用捕获括号。

(\w+)\W+\1

答案 1 :(得分:1)

[[\w|\W]+ ]+为我工作。击穿:

\w:单词字符

\W:非单词字符

[\w|\W]+:每个字符可以是单词或非单词字符并重复1次或更多次

[[\w|\W]+ ]+:...在某个时刻附加一个空格,全部发生一次或多次

答案 2 :(得分:0)

原始表达式不会为标点符号创建单独的捕获,但会在第一次捕获中包含捕获的标点符号。这意味着它会发现像:

diam, diam, really, really, twice.

但是你对标点符号并不感兴趣,所以tj111的解决方案正常工作,即使'(?:)是一个非捕获括号'解释有点......不完整?引用的评论是准确的,但这并不是整体正则表达式失败的原因。