如何使用正则表达式匹配文本中的多个字符串?

时间:2011-09-02 20:31:49

标签: regex

我需要一个正则表达式来验证必须存在的几个字符串的文本。说我有文本

  
      
  1. Rosy让男孩们狂野
  2.   
  3. Marys野孩子确实非常疯狂
  4.   
  5. 亨利是一个狂野的男孩
  6.   
  7. 莎莉昨晚与3个男孩跳舞
  8.   

我希望匹配既有'男孩'又'野'的句子(按任意顺序)。正确的匹配是1和2,但不是3和4。

任何人

4 个答案:

答案 0 :(得分:3)

http://www.regular-expressions.info/reference.html

/.*?wild.*?boys.*|.*?boys.*?wild.*/

您想要使用.*?,因为只有.*是贪婪的并且将使用整个字符串。通过贪婪的比赛,你将没有剩下的角色来匹配“狂野”和“男孩”,所以它总是会失败。

答案 1 :(得分:3)

正则表达式在这里过度杀伤。这工作正常,更具可读性:

for (String str : new String[] { "Rosy made the boys go wild", "Marys wild boys are very crazy indeed",
        "Henry is a wild boy", "Sally danced with 3 boys last night" }) {
    if (str.contains("wild") && str.contains("boys")) {
        System.out.println(str);
    }
}

打印:

Rosy made the boys go wild
Marys wild boys are very crazy indeed

答案 2 :(得分:3)

.*(?=\bboys\b).*(?=\bwild\b)|.*(?=\bwild\b).*(?=\bboys\b)

答案 3 :(得分:0)

(^.*boys.*wild.* $|^.*wild.*boys.*$)

当然,根据您使用它的位置进行适当的转义。