正则表达式。 PCRE。在文本中的任意位置查找重复的单词
Regex. PCRE. Find repeated words anywhere in the text
我需要找到在文本中3 次或更多 次任何地方 重复的单词。
像这样找到连续重复的单词非常容易:
\b(\w+)\s+\b
但我真的不知道如何为每个单词设置一个反向引用。我应该只为每组重复的单词设置一个反向引用。
如何select更多和更多的字和words words 甚至 more 其中 more
在这个例子中是否可以反向引用 more 和 words?
\b(\w+).*\b
以下模式应该有效:
\b(\w+)\b(.*?\b\b){2}
这会匹配任何单词,然后在文本中的任意位置再出现两次相同的单词。
编辑:
如果出于某种原因,您想在此处使用两个不同的反向引用,请尝试以下模式:
\b(\w+)\b.*?().*?
第二个反向引用的定义很简单,就是()
,即捕获的第一个反向引用,当然也是同一个重复词。
根据评论,对于您的要求,您可以使用:
\b(\w{4,})\b(?=.*?\b()\b.*?\b()\b)
关于群组
该模式使用了一个外部捕获组和 2 个内部捕获组。
对于第 1 组中捕获的每个词,最接近的 2 个词在第 2 组和第 3 组中被捕获,使它们至少重复 3 次。
要记住的是,如果处理组和之后的匹配,会有重叠匹配。
说明
\b
字边界
(
捕获 组 1
\w{4,}
匹配一个单词字符4次或更多次
)
关闭群组
\b
字边界
(?=
正向前瞻,断言右边的是
.*?
匹配除换行符之外的任何字符非贪婪
\b()\b
捕获 组 2,匹配组 1
.*?
匹配除换行符之外的任何字符非贪婪
\b()\b
捕获 组 3 匹配组 1
)
编辑
要匹配一个词后跟同一个词 2 次但不是 3 次,您可以使用正前瞻 (?=
断言组 1 后跟 2 次组 1 和负前瞻 (?!
断言第 1 组未被第 1 组关注 3 次。
\b(\w{4,})(?=(?:.*\b\b){2})(?!(?:.*\b\b){3})
我需要找到在文本中3 次或更多 次任何地方 重复的单词。 像这样找到连续重复的单词非常容易:
\b(\w+)\s+\b
但我真的不知道如何为每个单词设置一个反向引用。我应该只为每组重复的单词设置一个反向引用。
如何select更多和更多的字和words words 甚至 more 其中 more
在这个例子中是否可以反向引用 more 和 words?
\b(\w+).*\b
以下模式应该有效:
\b(\w+)\b(.*?\b\b){2}
这会匹配任何单词,然后在文本中的任意位置再出现两次相同的单词。
编辑:
如果出于某种原因,您想在此处使用两个不同的反向引用,请尝试以下模式:
\b(\w+)\b.*?().*?
第二个反向引用的定义很简单,就是()
,即捕获的第一个反向引用,当然也是同一个重复词。
根据评论,对于您的要求,您可以使用:
\b(\w{4,})\b(?=.*?\b()\b.*?\b()\b)
关于群组
该模式使用了一个外部捕获组和 2 个内部捕获组。
对于第 1 组中捕获的每个词,最接近的 2 个词在第 2 组和第 3 组中被捕获,使它们至少重复 3 次。
要记住的是,如果处理组和之后的匹配,会有重叠匹配。
说明
\b
字边界(
捕获 组 1\w{4,}
匹配一个单词字符4次或更多次
)
关闭群组\b
字边界(?=
正向前瞻,断言右边的是.*?
匹配除换行符之外的任何字符非贪婪\b()\b
捕获 组 2,匹配组 1.*?
匹配除换行符之外的任何字符非贪婪\b()\b
捕获 组 3 匹配组 1
)
编辑
要匹配一个词后跟同一个词 2 次但不是 3 次,您可以使用正前瞻 (?=
断言组 1 后跟 2 次组 1 和负前瞻 (?!
断言第 1 组未被第 1 组关注 3 次。
\b(\w{4,})(?=(?:.*\b\b){2})(?!(?:.*\b\b){3})