免费注册 查看新帖 |

Chinaunix

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

正则匹配 [复制链接]

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-10-02 21:01 |只看该作者 |倒序浏览
我的代码如下:
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;

  4. local $_ = '2233B55';
  5. my @aMatches = /\G(\d\d)/g;
  6. print "<@aMatches>\n";
  7. @aMatches = /(\d\d)/g;
  8. print "<@aMatches>\n";
复制代码

输出结果:
<22 33>
<22 33 55>

同样使用 /g 选项, 为什么第一个应用 \G 修饰符的正则表达式的返回结果返回的是 22 33 而不是 22 33 55.
曾经查找过一些资料, 感觉对 \G 修饰符的说明还是不理解, (匹配上次匹配结束的位置)
我的理解, 感觉添加 \G 后, 当正则引擎匹配 33 之后, 下一次匹配的位置从 33 之后 字母 B 之前的位置开始匹配, 由 \d\d 匹配 B5 但是匹配失败. 而此时正则引擎好像此次匹配失败后就放弃了进一步的匹配尝试,
并没有像没有 \G 的表达式那样, 向前推进一个字符的位置做进一步的匹配尝试, 而是直接宣告失败了.
我想请教大家, \G 修饰符是个啥意思? 谢谢大家...

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
2 [报告]
发表于 2016-10-02 21:54 |只看该作者
回复 1# sunzhiguolu

\G 表示下次匹配的时候必须从上次结束的位置开始,在碰到 B55 的时候,第一个正则就没办法再继续了,可是第二个则没有这个限制。

评分

参与人数 1信誉积分 +10 收起 理由
sunzhiguolu + 10 很给力!

查看全部评分

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
3 [报告]
发表于 2016-10-03 16:28 |只看该作者
本帖最后由 sunzhiguolu 于 2016-10-03 16:34 编辑

回复 2# MMMIX
非常感谢大神指点

/g \G 组合使用时, 有两点行为需要注意:
1.> 正则引擎每次迭代匹配时, 必须从上次匹配结束的位置进行匹配
2.> 对同一目标字符串进行多次匹配操作时, 都从位置 0 开始尝试匹配

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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP