在perl正则表达式中匹配多行中的单词

时间:2015-02-12 14:11:01

标签: regex perl

我想编写一个spamassassin规则来捕获垃圾邮件。这条规则会发现邮件中出现的一些不好的词。例如,这是一封电子邮件:

  

Lorem ipsum dolor坐下来,精神上的精神。 Donec   vehicula nec eros et consectetur。整数iaculis consectetur nisi sed   feugiat。 Praesent accumsan ipsum ac an an porttitor,ut fringilla   libero venenatis。 Sed porttitor imperdiet dignissim。整数   consectetur,nulla eu aliquet elementum,nisl lectus lobortis nisi,in   在ligula中的pretium sem dui。

文字有六个换行符。坏话是“不安全”,“iaculis”和“nec”。我在写一条规则:

/(?=.*imperdiet)(?=.*iaculis)(?=.*nec)/im

但这不起作用。它的工作只有当坏词在一行时。 如何匹配整个字符串?

2 个答案:

答案 0 :(得分:2)

(?=[\s\S]*imperdiet)(?=[\s\S]*iaculis)(?=[\s\S]*nec)

您可以尝试这种方式。它不需要修饰符。否则您也可以使用修饰符s ==> DOTALL

答案 1 :(得分:0)

感谢@vks和@hwnd告诉我如何写这个规则

/(?=.*imperdiet)(?=.*iaculis)(?=.*nec)/si

它起作用:)