正则表达式发现x次?

时间:2018-01-31 11:36:06

标签: regex

说我有字符串:

  

" foo bar foo x foo y bar foo"

我想找到三次或更多次出现的单词,所以" foo"。

要查找多次出现的单词,我有正则表达式

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

我尝试了(\b(\w+)\b(?=.*\1)){3,},但这不会返回匹配项。有什么建议吗?

感谢。

1 个答案:

答案 0 :(得分:4)

您可以使用此正则表达式:

^.*(\b\w+\b)(?<!^.*\1.*\1)(?:(?:(?!\1).)*\1){3}(?:(?!\1).)*$

RegEx Demo

<强>解释

  • ^.*:从头开始匹配。
  • (\b\w+\b):匹配并捕获第1组
  • 中的单词
  • (?<!^.*\1.*\1):Lookbehind在开始和组#1之间断言没有组#1
  • (?:(?:(?!\1).)*\1){3}:匹配一些东西加上#1组
    • (?:(?!\1).)*:匹配除组#1
    • 以外的任何内容
  • (?:(?!\1).)*$:匹配除组#1之外的任何内容