|
发表于 2017-11-23 14:20:08
|
显示全部楼层
回复 1# seu一壶浊酒
@aa = qw/wire_load wire_aa bb cc/;
if (grep /\S+?_?(?!load)$/,@aa) {
print grep /^[a-zA-Z]+?_?((?!load)[a-zA-Z]*?)$/,@aa;
print "\n";
}
亲测可用;
1. 尽管\S+后面加了?,进行非贪婪匹配,但是反过来想想,/\S+?_?(?!load)$/来匹配wire_load也是合理的,因为\S+?吞掉了wire_load,那也就用不到你后面(?!load)了,所以我后面改成了[a-zA-Z]+?
2. ((?!load)[a-zA-Z]*?)里面为什么要补充[a-zA-Z]*?, 因为对于wire_aa来说,wire_匹配成功了,后面也的确不允许load出现,但是是不是应该还允许其他字母字符的出现呢?否则直接到$, 那么只能匹配wire_和bb,cc这种情况
你说的预见匹配,很少用到,不过正则的规则大概套路是清晰的。欢迎讨论 |
|