使用Perl和Regex,是否可以创建单行正则表达式以匹配某些短语,而不匹配其他短语?规则存储在哈希中,并且限定符(列)需要匹配输入给它的表达式。
我有一个包含限定词的对象,我希望将其作为单行正则表达式输入。例如:
my %filters = {
rule_a => {
regex => {
qualifier_a => qr/fruits/i,
qualifier_b => qr/apples|oranges|!bananas/i, # NOT bananas
}
}
}
因此,在这种情况下,我要匹配包含“水果”的qualifier_a和包含“苹果”,“橙色”而不是“香蕉”的qualifier_b。
该脚本如下循环遍历每个限定符:
my $match = 1; # Assume a match
foreach my $qualifier (keys %filters{rule_a}{regex}) {
# If fails to match, set match as false and break out of loop
$match = ($qualifier =~ /%filters{rule_a}{regex}{$qualifier}/) ? 1 : 0);
if(!$match){
last;
}
}
if($match){
# Do all the things
}
有什么想法吗?
有点令人费解,但它的工作是:
^.*?bananas.*(*SKIP)(*FAIL)|apples|oranges
如果第一部分包含bananas
,则第一部分将与整个字符串匹配,然后强制失败而不在下一个位置重试。
该演示用于.
使行独立,但是s
如果您的字符串可以包含换行符,则可以使用该选项。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句