正则表达式,匹配列表中的至少两个单词

时间:2013-06-18 15:07:59

标签: regex language-agnostic

我有一个单词列表 - "foo""bar""baz" - 我想写一个正则表达式,它匹配至少包含2个字符串的字符串。例如,"foo baz"应该匹配,而"ba foo z"不应该匹配。

明显的解决方案"(foo|bar|baz).*(foo|bar|baz)"有效,但我发现它不能令人满意,因为它列出了两次这两个词。如果我有25个单词而不是3个单词怎么办?如果我要查找包含至少4个给定单词而不是2个单词的字符串怎么办?

2 个答案:

答案 0 :(得分:4)

这听起来并不像是在寻找确切的单词,所以驴的解决方案可能不是你想要的

((foo|bar|baz).*?){2}

它会在文本中搜索任何字符串,然后搜索任何字符,直到再次找到其中一个可选字符串,并且由于懒惰的任何字符部分都将通过匹配任何内容来完成,匹配就完成了。

如果您希望它匹配多行,请务必打开全部点,或使用\ s \ S而不是点。

答案 1 :(得分:0)

我认为这个解决方案应该有效:

"(foo|bar|baz).*\s+\1(\s+|$)"

\s表示空格字符应该确保您找到确切的单词而不仅仅是前缀。例如,"foo ... fooo"无法识别。