免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: wind_ch
打印 上一主题 下一主题

正则表达式无法生效 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2010-01-08 16:45 |只看该作者
看了mwm5提供的<<精通正则表达式>>3 4 5章和perlre, perlop. 疑问之处基本想通了.

对于\G, 他和^, $一样, 他在正则表达式中虽然不匹配任何字符, 但是要匹配一个位置. 所以写成#\G//#其实是说: 自上次匹配结束的位置后紧跟两个/.
相当于在$'上使用#^//#.
而我之前错误地以为, 使用\G会把引擎执行匹配动作的起始位置定在上次匹配结束之后, 然后用\G后面的模式匹配剩余的串 (区别在于: \G自身是要匹配上一个位置, 而不是指示引擎从这里来开始匹配).

对于之前提到的: 想在上次匹配剩余的串中进行模式匹配, 而模式不是一开始就匹配得上, 用\G是不行的.(perl好像不直接提供这样的支持, 你需要使用/gc慢慢地挪到你想要的模式前面)

受启发于黑哥的 s#\G//#/# while m#/[^/]+#g;
我有个更快些的 s#\G//#/# while m#//[^/]+/?[^/]+#gc;

再次感谢黑哥, 以及感谢mwm5提供不全(1,3,4,5章)但相当够用的<<精通正则表达式>>(中文版)

[ 本帖最后由 wind_ch 于 2010-1-8 16:46 编辑 ]

论坛徽章:
0
12 [报告]
发表于 2010-01-10 14:49 |只看该作者

回复 #1 wind_ch 的帖子

楼主“但我自己运行都不好用, 而且我觉得应该吧 m#^[^/]//# 写成 m#^[^/]+?//#, 也不行.
是什么原因呢?”想明白了 麻烦告知下。。我也正糊涂中。。。

论坛徽章:
0
13 [报告]
发表于 2010-01-11 09:40 |只看该作者

回复 #12 suxingwakeup 的帖子

你樓上就是原因.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP