免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1515 | 回复: 6
打印 上一主题 下一主题

求教正则达人! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-01-21 16:50 |只看该作者 |倒序浏览
本帖最后由 linwenjunid 于 2013-01-21 16:52 编辑

s/(\d)(\d\d\d)(?!\d)/$1,$2/;

求教这个正则表达式里面  ?!  这2个符号的意义!



论坛徽章:
0
2 [报告]
发表于 2013-01-21 17:37 |只看该作者
找到资料了!

预见匹配
   简单说,就是匹配时考虑预见匹配的那一部分,不符合的不能算匹配上,但匹配的结果部分(变量$&)要除去预见匹配部分,又分两种。
1 肯定预见匹配  /pattern(?=string)/;匹配时,要考虑符合string
   例如 $string="25abc8"  
       $string =~/abc(?=[0-9])/  
此时 abc8是符合 abc[0-9]模式的,但得到的$&不含8,而是abc.
那为何不去掉预见匹配部分呢?比如
        $string="25abc8"
        $string=~/abc/
结果 $&也是 abc,而不是abc8
这样也是匹配的,结果似乎也"正确".其实不然,考虑
        $string="25abcu"
按先前的模式/abc(?=[0-9])/,是不匹配的,但按后面"简化"后的 /abc/,就匹配了,考虑到这种情况,使用预见匹配效果是不一样的.

2 否定预见匹配  /pattern(?!string)/;匹配时,要考虑不符合string的才行,结果$&仍然只是取patern部分,不包括string

论坛徽章:
0
3 [报告]
发表于 2013-01-21 18:36 |只看该作者
不就是否定顺序环视嘛(negative lookahead)。

论坛徽章:
6
摩羯座
日期:2013-08-24 10:43:10狮子座
日期:2013-08-25 10:27:06天秤座
日期:2013-09-11 20:28:44午马
日期:2014-09-28 16:06:0015-16赛季CBA联赛之八一
日期:2016-12-19 13:55:0515-16赛季CBA联赛之天津
日期:2016-12-20 14:01:23
4 [报告]
发表于 2013-01-21 19:52 |只看该作者
本帖最后由 cao627 于 2013-01-21 19:53 编辑

positive lookahead      pattern(?=exp)        在匹配exp前面匹配pattern,即模式pattern匹配的前提是:其后能先行匹配到exp。
negative lookahead      pattern(?!exp)        在匹配不到exp的前面匹配pattern,即模式pattern匹配的前提是:其后不能匹配到exp
positive lookbehind       (?<=exp)pattern   在匹配exp后面面匹配pattern ,略。
negative lookbehind      (?<!exp)pattern    在匹配不到exp的后面匹配pattern ,略。

论坛徽章:
0
5 [报告]
发表于 2013-01-22 11:31 |只看该作者
各位大侠都补充的很好!

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-06-23 06:20:00
6 [报告]
发表于 2013-01-22 14:25 |只看该作者
环视环视环视环视

论坛徽章:
0
7 [报告]
发表于 2013-01-22 19:40 |只看该作者
本帖最后由 kelvenchi 于 2013-01-22 19:43 编辑

是环顾断言的一种叫反前瞻断言。需要注意的是larry wall 喜欢把字符串的右边叫做前面(Perl语言编程第三版)。这个反前瞻的意思就是,前面如果出现了某个字符或字符串,那么整个模式就不匹配。如果没有出现指定的字符串就匹配。环顾断言参与匹配但不参与其他操作。比如你这个替换操作,只会替换从右往左的四个数字。如果你把正则看成是一种语言的话,可以把环顾断言看成是条件判断。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP