免费注册 查看新帖 |

Chinaunix

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

已经解决.结贴 脚本 Perl - 正则匹配过程 (分组 组值) [复制链接]

论坛徽章:
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
11 [报告]
发表于 2015-09-26 19:54 |只看该作者
本帖最后由 sunzhiguolu 于 2015-09-26 20:00 编辑

回复 9# 104359176
反向引用首先是捕获后引用,你还没有捕获,就引用,这种行为已经很怪异了,还要探讨 Perl 正则的实现细节,我认为是舍本逐末。

另外, 您能否说明一下 "反向引用首先是捕获后引用,你还没有捕获,就引用,这种行为已经很怪异了" 这句话是针对表达式的什么地方所指? 小弟有点糊涂, 不懂...

    若是您对正则有一定的理解, 您对这种匹配行为是如何理解的?
当表达式的数字字符 "4" 去尝试匹配字符串的结束字符失败后, 前面的分组交出字符 "44" 后, 为什么不会让字符组 "[0-9]" 再次尝试匹配?

   

论坛徽章:
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
12 [报告]
发表于 2015-09-26 20:46 |只看该作者
本帖最后由 sunzhiguolu 于 2015-09-26 20:48 编辑

     如果您也喜欢正则, 也请您说一下您对于此问题的理解. (我也比较喜欢正则, 只是比较粗浅)

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
13 [报告]
发表于 2015-09-26 21:35 |只看该作者
本帖最后由 jason680 于 2015-09-26 21:44 编辑

回复 1# sunzhiguolu

print them($1,$2,...) to understand it easily

$ perl -e '{$_=11223344;print "Match! \$1=$1,\$2=$2\n" if(m/\b(([0-9])\2)+4/)}'
Match! $1=33,$2=3

$ perl -e '{$_=11223344;print "Match! \$1=$1,\$2=$2,\$3=$3\n" if(m/\b((([0-9])\3)+)4/)}'
Match! $1=112233,$2=33,$3=3


BTW, about the \b

$ perl -e '{$_=311223344;print "Match! \$1=$1,\$2=$2,\$3=$3\n" if(m/\b((([0-9])\3)+)4/)}'

$ perl -e '{$_=311223344;print "Match! \$1=$1,\$2=$2,\$3=$3\n" if(m/((([0-9])\3)+)4/)}'
Match! $1=112233,$2=33,$3=3




   

评分

参与人数 1信誉积分 +10 收起 理由
sunzhiguolu + 10 希望我的感谢不是太晚, 多谢您的指点.

查看全部评分

论坛徽章:
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
14 [报告]
发表于 2015-09-26 21:40 |只看该作者
回复 9# 104359176


    你这正则的语义和楼主的完全是两回事。

论坛徽章:
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
15 [报告]
发表于 2015-09-26 21:47 |只看该作者
回复 13# jason680
大神您好, 感谢的回帖.
其实, 我的这个问题中的数字就是取自下面这个帖子. 其中也包括了您在其中举得一个小例子. (关于 Perl 正则的相对引用的举例) 链接如下:
正则分组的捕获与反向引用
    您能否简单说一下, 关于我的问题? (不知我对问题的描述是否正确, 如有不对还请您指点...)
   

论坛徽章:
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
16 [报告]
发表于 2015-09-26 22:02 |只看该作者
本帖最后由 sunzhiguolu 于 2015-09-26 22:03 编辑

回复 13# jason680
    另外, 小弟有个地方不太明白. 还请您再次给予帮助, 就是在表达式匹配部分您是出于什么原因将元字符 "\b" 放进匹配模式中? 我只是想借这个例子中的数字将我的问题描述一下,
结果光顾着学别人出门带墨镜了但为啥带墨镜却不知道! 希望您别见笑. (这个比方我也不知道是否合适, 请别介意.)

   

论坛徽章:
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
17 [报告]
发表于 2015-09-26 22:15 |只看该作者
回复 15# sunzhiguolu


    说了这么半天,你到底有什么问题?不理解为什么能匹配成功?不明白为什么各个 capture group 为什么是那么个值?还是说其他问题?

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
18 [报告]
发表于 2015-09-26 22:18 |只看该作者
回复 16# sunzhiguolu

>> ...结果光顾着学别人出门带墨镜了但为啥带墨镜却不知道!

不知墨镜为何物,勿用...

忘了这帖!
(没有意义,前人(三年前)讨论,
我就没看出他们有什么意义?
三年后你又不明事理,自找麻烦...)

论坛徽章:
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
19 [报告]
发表于 2015-09-26 22:37 |只看该作者
本帖最后由 sunzhiguolu 于 2015-09-26 23:07 编辑

回复 17# MMMIX
/(([0-9])\2)+4/

大神, 在我的问题中只是引用了上面帖子中的数字. 之所以给出哪个链接是因为 "jason680" 在回帖中使用了 (他/她) 在当年帖子中的举例.
(其中表达式元字符 "\b" 也是我直接拿过来贴上的, 并没有多想. (我只希望能够将我的问题描述清楚即可) 在这里要感谢 "104359176" 您对知识严谨的态度,谢谢!)
表达式 "4" 在前面的分组匹配完成后 (红色括号部分), "4" 匹配最后一个结束字符失败后, 为了完成匹配, 分组肯定会交出一对字符 "44" (也就是最后一组) 由表达式"4" 去匹配, 但是在这之前
不是应先由捕获组中字符组 "[0-9]"先行匹配吗? 是什么原因就直接结束了此次匹配尝试, 而直接由表达式最后的 "4" 进行匹配?

   

论坛徽章:
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
20 [报告]
发表于 2015-09-26 22:47 |只看该作者
回复 18# jason680
忘了这帖!
(没有意义,前人(三年前)讨论,
我就没看出他们有什么意义?
三年后你又不明事理,自找麻烦...)

我懂您的意思了, 您能否科普一下关于我提出的问题? (如果能使用中文那就更完美了)

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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP