检查字符串与所有给定正则表达式之间是否匹配

时间:2012-08-17 22:16:09

标签: regex perl

我知道可以在正则表达式上使用OR运算符:

$str = "Here is a strawhat, some cranberry, and a strawberry!";
while($str =~ /(\bstraw\B|\Bberry\b)/g) {
  print "Thanks for the $& !\n";
}

是否有一个简单而简短的方法而不是一个while循环来AND而不是OR,所以唯一的匹配是“草莓”?

换句话说,我需要检查字符串中是否存在与所有给定正则表达式匹配的子字符串。

1 个答案:

答案 0 :(得分:4)

如果我正确理解您的问题,您可以使用lookahead assertions

if ($str =~ /^(?=.*?regexp-1)(?=.*?regexp-2)...(?=.*?regexp-n)/s) {
    # $str matches regexp-1, regexp-2, ..., regexp-n.
}

这种结构中有几个假设:

  • 所有子表达式都是格式良好的。
  • 没有子表达式使用.元字符表示“除换行符之外的任何字符”。您可以根据需要使用(?-s:...)重新启用此行为。