找回密码
 注册
查看: 6324|回复: 1

perl语言优先级练习

[复制链接]
发表于 2011-11-14 20:45:09 | 显示全部楼层 |阅读模式
当需要解析复杂的正则表达式时,你应当像Perl 那样使用优先级表来理解它。
例如,/^fred|barney$/很可能并不是程序员想要的模式。由于竖线(|)的优先级最低;它将上述模式分成了两部分。这个模式
在或者开头是fred,或者结尾是barney 时匹配上。很可能程序员想要的是(^(fred|barney)$),这将匹配只有fred 或者只有barney
的行◆。那/(wilma|pebbles?)/呢?问号也对前面的元素有效◆,它将匹配wilma, pebbles, 或者pebble,可能是某个长字符串
的一部分(因为没有锚定)。
◆当然,结尾处可以有换行符,我们在早期讨论$锚定时提到过。
◆因为数量词?和字母s 结合更紧密
模式/^(\w+)\s+(\w+)$/将匹配那些含有一个“词(word)”,一些空白,另一个“词(word)”,之外没有其它符号的行。
它将匹配上像fred flintstone 这样的行。模式中的括号是不需要的,当然它们可以将匹配上的字符串存放在$1,$2 之中。
当解析复杂的正则表达式时,括号将有助于你区分优先级。可以这样做,但请记住,如果使用了括号,则这些括号所匹配
的字符串将放在相应的内存变量之中($1,$2...)之中。当添加新的括号时也可能需要改变这些以前的编号◆。
◆察看perlre 的帮助手册了解更多的不会引起内存分配的括号,它们仅是用来分组。
回复

使用道具 举报

发表于 2012-2-26 14:59:03 | 显示全部楼层
谢谢分享了~~
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|小黑屋|生物统计家园 网站价格

GMT+8, 2024-11-21 14:37 , Processed in 0.044315 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表