正则表达式检查字符串是否包含一组中的两个或多个单词实例

时间:2014-07-30 22:14:10

标签: regex

我正在尝试编写一个正则表达式,以查看给定字符串中集合中是否有2个或更多单词。

如果该集合是[cat,dog]则:

“戴着帽子的猫” - 假

“猫与狗” - 真实

“猫与猫” - 真的

我尝试了这些,但它们无法正常工作:

\bcat\b|\bdog\b{2,}
(\bcat\b|\bdog\b){2,}

这个查询是否可以使用正则表达式?

2 个答案:

答案 0 :(得分:1)

选项1:Pure Regex

(?:.*(?:\b(?:cat|dog)\b)){2}

如果匹配,则True表示存在两个或更多单词。

如果你想成为一个关于正则表达式的纯粹主义者,它本身构成一个布尔断言(没有字符匹配),我们可以将它包装在一个预测中:

^(?=(?:.*(?:\b(?:cat|dog)\b)){2})

选项2:计算匹配

如果您使用的是编程语言,则此伪代码:

WordsRegex = \b(?:cat|dog)\b
MatchCount = count matches(WordsRegex, string)
TwoOrMore = ( MatchCount > 1)

答案 1 :(得分:0)

您想要匹配的简单真/假结果,还是想要实际捕获匹配的单词?

某些正则表达式语言(如PCRE)允许"模式重复"使用(?[某些数字])格式:

(?=(cat|dog).*(?1))

这会查找catdog,然后(由于(?1))会再次查找catdogExample 1

如果你想捕捉模式(整个事物或单个词),你可以使用以下之一:

((cat|dog).*((?2)))

Example 2

(?:(cat|dog).*((?1)))

Example 3

示例2捕获\1引用中的整个组,分别在\2\3中捕获了单词。

示例3没有捕获整个组,但它分别捕获\1\2中的单词。

其他语言(Javascript,Python)可能会有不同的处理方式,因此您可能无法访问(?1)引用。