我想知道文本中是否包含具有 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
答案 0 :(得分:5)
如果我正确理解了您的问题,则应该执行您想要的操作:
(?=(\b\w{4,}\b)(?:.*\b\1\b){2})(?!(\b\w{4,}\b)(?:.*\b\1\b){3})
它与您的正则表达式基本相同,它查找重复的4个字符的单词,但它查找2次额外的出现(因此出现3次)。匹配的单词将在组1中捕获。正则表达式包含3个重复的负前行,因此,如果相同的单词出现4次或更多次,则不会匹配两次。