我知道可以在正则表达式上使用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,所以唯一的匹配是“草莓”?
换句话说,我需要检查字符串中是否存在与所有给定正则表达式匹配的子字符串。
答案 0 :(得分:4)
如果我正确理解您的问题,您可以使用lookahead assertions:
if ($str =~ /^(?=.*?regexp-1)(?=.*?regexp-2)...(?=.*?regexp-n)/s) {
# $str matches regexp-1, regexp-2, ..., regexp-n.
}
这种结构中有几个假设:
.
元字符表示“除换行符之外的任何字符”。您可以根据需要使用(?-s:...)
重新启用此行为。