2

我知道可以在正则表达式上使用 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,以便唯一的匹配是“草莓”?

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

4

1 回答 1

4

如果我正确理解您的问题,您可以为此使用前瞻断言:

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

这个结构中有几个假设:

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