比赛重复3次或更多次

时间:2019-03-03 12:32:30

标签: regex

这是一个测验练习

我想知道文本中是否包含具有 4个字符或更多的单词,这些单词在文本中(文本中的任意位置)重复 3次以上。如果是这样,请为每个单词设置一个(也只有一个)反向引用。

我尝试了代码

(?=\b(\w{4,}+)\b.*\1)

结果返回

  

测试10/39:不起作用,对不起。再次阅读任务说明。它与notword单词word匹配

尝试

(?=(\b\w{4,}\b)(?:.*\b\1\b){2,})
  

测试22/39:如果某个单词重复多次,则您将设置多个反向引用(常见错误,我知道)。您不一定需要匹配单词的首次出现。您可以避免在> word <单词单词单词中匹配,而在> word <单词单词单词中匹配吗? (提示:如果后面有2个匹配项,则匹配;如果后面有3个匹配项,则不匹配)

正则表达式demo

1 个答案:

答案 0 :(得分:5)

如果我正确理解了您的问题,则应该执行您想要的操作:

(?=(\b\w{4,}\b)(?:.*\b\1\b){2})(?!(\b\w{4,}\b)(?:.*\b\1\b){3})

它与您的正则表达式基本相同,它查找重复的4个字符的单词,但它查找2次额外的出现(因此出现3次)。匹配的单词将在组1中捕获。正则表达式包含3个重复的负前行,因此,如果相同的单词出现4次或更多次,则不会匹配两次。

Demo on regex101

相关问题