我想要做的是检查彼此相邻的重复单词,但即使两者之间存在标点符号。
例如:
Vivamus Vivamus diam, diam, Vivamus Vivamus diam, diam Vivamus
这里应该有4个不同的点击。
我无法弄清楚为什么这不起作用;有人可以解释原因,并告诉我正确的代码应该是什么?
感谢。
(\w*(?:[ ,\.])*?)\1
PS:由于它引起的混乱,我不会说我正在使用Perl引擎。
答案 0 :(得分:8)
(?:
是一个非捕获括号,意味着它不会存储匹配项。您需要使用捕获括号。
(\w+)\W+\1
答案 1 :(得分:1)
[[\w|\W]+ ]+
为我工作。击穿:
\w
:单词字符
\W
:非单词字符
[\w|\W]+
:每个字符可以是单词或非单词字符并重复1次或更多次
[[\w|\W]+ ]+
:...在某个时刻附加一个空格,全部发生一次或多次
答案 2 :(得分:0)
原始表达式不会为标点符号创建单独的捕获,但会在第一次捕获中包含捕获的标点符号。这意味着它会发现像:
diam, diam, really, really, twice.
但是你对标点符号并不感兴趣,所以tj111的解决方案正常工作,即使'(?:)是一个非捕获括号'解释有点......不完整?引用的评论是准确的,但这并不是整体正则表达式失败的原因。