【发布时间】:2018-02-13 02:04:47
【问题描述】:
我正在尝试创建一个正则表达式,如果一个字符串在 N 中至少包含 2 个单词,则该表达式将创建一个匹配项。例如,取单词 ('one', 'two', 'three', 'four ')。此正则表达式应返回所有这些情况的匹配项:
one two three four
twothreeone
two plus two is four
它不应该返回匹配项:
one
three plus three is three
我尝试过类似 this'/^(?=.*one)(?=.*two)(?=.*three)(?=.*four).+/' 的方法,但只有当字符串中包含所有单词 ('one', 'two', 'three', 'four') 时才会匹配。
【问题讨论】:
-
您可以执行以下操作:
(one|two|three|four).*(?!\1)(?:one|two|three|four),但使用基本字符串函数测试每个单词并在获得两个结果后停止会更简单。 -
这是我想出的解决方案之一,但实际上我还有很多字(大约 30 个)需要检查,所以我希望得到一些不需要我输入的字词一切都两次。
-
在 Perl/PCRE 中,您可以使用
(?n)对捕获组中的子模式的引用,其中 n 是捕获组的编号。所以:(one|two|three|four).*(?!\1)(?1)。在最坏的情况下,当您知道快捷键 ctrl+c 和 ctrl+v 时,您不必键入两次 -
@CasimiretHippolyte,它有效!很好的发现,每天都学习新东西!确实,PCRE 不需要复制粘贴!