检查是否有重复至少2次或更多次的单词。 (正则表达式)

时间:2016-04-02 00:37:15

标签: regex perl

使用正则表达式

来自任何至少有一个单词重复两次或更多次的输入行。

这是我有多远。

/(\ B \ W + \ b)中。* \ 1

但这是错误的,因为它只检查单个字符,而不是一个字。

输入:我可能生病了

输出:<我可能是我> ll

<>标记匹配的部分。

所以,我尝试做(\ b \ w + \ b)(\ b \ w + \ b)* \ 1 但它并没有完全发挥作用。

有人可以帮忙吗?

感谢。

3 个答案:

答案 0 :(得分:0)

这应该有效

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

贪婪算法将确保最长匹配。如果你想要第二个实例是一个单独的单词,你也必须在那里添加边界。所以和

一样
\b(\w+)\b.*\b\1\b

答案 1 :(得分:0)

要查看重复的字词,您可以使用positive lookahead这样的内容。

正则表达式: (\b[A-Za-z]+\b)(?=.*\b\1\b)

说明:

  • (\b[A-Za-z]+\b)会抓住任何字词。

  • 如果组中捕获的单词存在与否,
  • (?=.*\b\1\b)将会前瞻。如果是,则找到匹配。

注意: - 这会产生重复的结果,因为当正则表达式指针 将其作为单词捕获时,匹配一次的单词将再次匹配

您必须使用编程去除重复的结果。

<强> Regex101 Demo

答案 2 :(得分:0)

Positive lookahead不是必须的:

/\b([A-Za-z]+)\b[\s\S]*\b\1\b/g

<强>说明

\b([A-Za-z]+)\b     # match any word
[\s\S]*             # match any character (newline included) zero or more times
\b\1\b              # word repeated   

REGEX 101 DEMO