鱼C论坛

 找回密码
 立即注册
查看: 770|回复: 3

[已解决]关于正则表达式的匹配问题

[复制链接]
发表于 2018-7-21 13:21:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
在小甲鱼的扩展阅读理解, 用a[bcd]*b去匹配字符串 abcbd
过程不是很理解。
步骤        匹配        说明
1        a        匹配 RE 的第一个字符 'a'
2        abcbd        引擎在符合规则的情况下尽可能地匹配 [bcd]*,直到该字符串的结尾
3        失败        引擎尝试匹配 RE 最后一个字符 'b',但当前位置已经是字符串的结尾,所以失败告终
4        abcb        回退,所以 [bcd]* 匹配少一个字符
5        失败        再一次尝试匹配 RE 最后一个字符 'b',但字符串最后一个字符是 'd',所以失败告终
6        abc        再次回退,所以 [bcd]* 这次只匹配 'bc'
7        abcb        再一次尝试匹配字符 'b',这一次字符串当前位置指向的字符正好是 'b',匹配成功

第二步不是很懂。
最佳答案
2018-7-21 16:23:44
2        abcbd        引擎在符合规则的情况下尽可能地匹配 [bcd]*,直到该字符串的结尾

可能你没明白[bcd]的意思,[bcd]表示匹配bcd三个字符中的任意一个,如果后面加上一个*号,则表示匹配0到任意个bcd,只要是这三个字符的组合,中间不出现之外的其他字符,任意长度,任意顺序,[bcd]*都是匹配的。

就abcbd字符串来说,表达式:a[bcd]* 是完全匹配的,但实际表达式是:a[bcd]*b,要求最后的字符是b,而实际是d,第三步匹配失败。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-7-21 16:23:44 | 显示全部楼层    本楼为最佳答案   
2        abcbd        引擎在符合规则的情况下尽可能地匹配 [bcd]*,直到该字符串的结尾

可能你没明白[bcd]的意思,[bcd]表示匹配bcd三个字符中的任意一个,如果后面加上一个*号,则表示匹配0到任意个bcd,只要是这三个字符的组合,中间不出现之外的其他字符,任意长度,任意顺序,[bcd]*都是匹配的。

就abcbd字符串来说,表达式:a[bcd]* 是完全匹配的,但实际表达式是:a[bcd]*b,要求最后的字符是b,而实际是d,第三步匹配失败。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-21 17:26:41 | 显示全部楼层
凌九霄 发表于 2018-7-21 16:23
2        abcbd        引擎在符合规则的情况下尽可能地匹配 *,直到该字符串的结尾

可能你没明白的意思 ...

就是说【bcd】* 可以是b,bc,bcd,c,cd,bd,就是b,c,d之间任意组合?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-21 19:48:13 | 显示全部楼层
小小小小的鱼丶 发表于 2018-7-21 17:26
就是说【bcd】* 可以是b,bc,bcd,c,cd,bd,就是b,c,d之间任意组合?

是的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-18 04:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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