在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2182|回复: 3

[求助] Perl 正则匹配 请教

[复制链接]
发表于 2017-11-22 15:49:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
@aa = qw/wire_load wire_aa bb cc/;
if (grep /\S+?_?(?!load$)/,@aa) {
   print grep /\S+?_?(?!load$)/,@aa;
   print "\n";
}


想请教非常熟悉perl regexp的大神,上面用零宽断言想匹配不以load结尾的 str,我的脚本有什么问题, 为什么实现不了?

万分感谢!!
发表于 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这种情况

你说的预见匹配,很少用到,不过正则的规则大概套路是清晰的。欢迎讨论
 楼主| 发表于 2017-11-24 14:57:25 | 显示全部楼层
回复 2# sdlyyuxi

感谢解答, 明白了.
发表于 2017-12-1 10:44:18 | 显示全部楼层
十分了解了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

×

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-19 04:08 , Processed in 0.016238 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表