免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3579 | 回复: 16

关于Perl正则的特殊模式的不解 [复制链接]

论坛徽章:
3
CU十二周年纪念徽章
日期:2013-10-24 15:41:34子鼠
日期:2013-12-14 14:57:19射手座
日期:2014-04-25 21:23:23
发表于 2012-10-25 11:06 |显示全部楼层
看了perlre,还有几个操作符不是太了解(最重要是小弟的英文不好)望正则达人 能给小弟解释下:
  1. (?{}) or (??{})  符号的意思 最好能有几个实例。。
  2. 还有(*FAIL)和(?!)表示的意思是相同的?
复制代码

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
发表于 2012-10-25 11:27 |显示全部楼层
不明白很正常,我第一次看这个文档到明白这几个至少过了一年时光

论坛徽章:
78
双子座
日期:2013-10-15 08:50:09天秤座
日期:2013-10-16 18:02:08白羊座
日期:2013-10-18 13:35:33天蝎座
日期:2013-10-18 13:37:06狮子座
日期:2013-10-18 13:40:31双子座
日期:2013-10-22 13:58:42戌狗
日期:2013-10-22 18:50:04CU十二周年纪念徽章
日期:2013-10-24 15:41:34巨蟹座
日期:2013-10-24 17:14:56处女座
日期:2013-10-24 17:15:30双子座
日期:2013-10-25 13:49:39午马
日期:2013-10-28 15:02:15
发表于 2012-10-25 11:29 |显示全部楼层
perldoc perlre里面有例子

论坛徽章:
3
CU十二周年纪念徽章
日期:2013-10-24 15:41:34子鼠
日期:2013-12-14 14:57:19射手座
日期:2014-04-25 21:23:23
发表于 2012-10-25 11:37 |显示全部楼层
  能不能举几个简单的例子。。
perlre 的解释 是在不太懂

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
发表于 2012-10-25 11:47 |显示全部楼层
(?{}) 永远成功,对于正则匹配有和没有一样,唯一的用处就是里面代码的副作用,就好像 print 一样。 比如 'abcd' =~ /(.)(?{say $1})c/;

(?!) 永远会失败,不明白看看 (?=) 它是永远成功的。因为任何东西都可以匹配 ''。而匹配失败会回溯(如果不懂回溯那你应该看不到这里吧)而 (*FAIL) 是专门用来强制回溯的,功能上碰巧完全一样了。比如 'abc' =~ /(.)(?{say $1})(?!)/; 每次到 (?!) 这里都失败,直到无法回溯匹配失败,但是中间代码的副作用却会执行

(??{}) 与 (?{}) 唯一不同的地方是它会把代码执行的结果给插入正则表达式式中。
比如匹配相邻的两个数字,第二个数字比第一个大1,正则表达式表达式是不支持数学计算的,而且第二个匹配需要根据第一个数字动态创建那么

'12,13' =~ /(\d+),(??{$1+1})/; 把 $1+1 这个结果插入到这里,对于这里相当于 13

论坛徽章:
3
CU十二周年纪念徽章
日期:2013-10-24 15:41:34子鼠
日期:2013-12-14 14:57:19射手座
日期:2014-04-25 21:23:23
发表于 2012-10-25 11:53 |显示全部楼层
回复 5# zhlong8


    :wink: 版主V5

论坛徽章:
0
发表于 2012-10-25 11:58 |显示全部楼层
大鼻子V5:wink:

论坛徽章:
0
发表于 2012-10-26 10:12 |显示全部楼层
programming perl, 4th的第五章中已经讲的很清楚了。lz应该先看看。

论坛徽章:
3
CU十二周年纪念徽章
日期:2013-10-24 15:41:34子鼠
日期:2013-12-14 14:57:19射手座
日期:2014-04-25 21:23:23
发表于 2012-10-26 11:26 |显示全部楼层
回复 8# iLRainyday


    谢谢,看过了。。这一章只是一个表格介绍了他的意思(我是说(?key)这类的Extended Patterns)基本无实例,我现在是对照着论坛上很多regex包含这一类实例来看的。我已经做好准备来慢慢理解他了。。
   我已经明白“不明白很正常,我第一次看这个文档到明白这几个至少过了一年时光”。。确实不容易

论坛徽章:
0
发表于 2012-10-26 11:52 |显示全部楼层
本帖最后由 iLRainyday 于 2012-10-26 12:29 编辑

回复 9# mcshell

只是一个表格?你确定你看的和我说的是同一本书?你翻开programming perl第4版的第255页(或者是第3版的第210页),从这里开始作者用了4页的内容来讲这个?{}。


PS. 在?{}中local的用法我也没搞明白。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP