正则表达式获得子匹配的问题 正则表达式高手 请进
(a(b*))*模式abbbaabbabababa这是要匹配的字符串我认为应该是能匹配上abbb,但是是匹配软件只能匹配上a,不知道这是个什么意思,什么过程。另外如何获得...
(a(b*))* 模式
abbbaabbabababa 这是要匹配的字符串
我认为应该是能匹配上abbb,但是是匹配软件只能匹配上a,不知道这是个什么意思,什么过程。另外 如何获得(b*)这个匹配呢 也就是在一个子匹配中去获得另一个子匹配
首先 谢谢各位的回答
看了lifecursor的回答 我感觉你对正则表达式体会得挺深的 但是 在晚上我研究的时候 我也找到了匹配的解释 和你的有点不一样的地方 不过 被软件圆满解释了 而且在执行原则上也说得过去
下面我说一下我的看法
(a(b*))*
首先 它是a(b*)的若干重复的组合 这个肯定没问题吧
其次 它是这些具体匹配的组合 (a) (ab) (abb) (abbb.......) 这也没问题吧
组合的意思也就是说 只要一个串可以被分割成连续的上面的各部分,就可以达到完全匹配。
所以,答案就出来了,abbbaabbabababa
第一次 匹配abbb
第二次 匹配a
第三次 匹配abb 注意 由于是上面的组合 所以a一定只以出现一次
第四次 匹配ab
第五次 匹配ab
第六次 匹配ab
第七次 匹配a
第一次 匹配abbb
再次谢谢大家的回答 展开
abbbaabbabababa 这是要匹配的字符串
我认为应该是能匹配上abbb,但是是匹配软件只能匹配上a,不知道这是个什么意思,什么过程。另外 如何获得(b*)这个匹配呢 也就是在一个子匹配中去获得另一个子匹配
首先 谢谢各位的回答
看了lifecursor的回答 我感觉你对正则表达式体会得挺深的 但是 在晚上我研究的时候 我也找到了匹配的解释 和你的有点不一样的地方 不过 被软件圆满解释了 而且在执行原则上也说得过去
下面我说一下我的看法
(a(b*))*
首先 它是a(b*)的若干重复的组合 这个肯定没问题吧
其次 它是这些具体匹配的组合 (a) (ab) (abb) (abbb.......) 这也没问题吧
组合的意思也就是说 只要一个串可以被分割成连续的上面的各部分,就可以达到完全匹配。
所以,答案就出来了,abbbaabbabababa
第一次 匹配abbb
第二次 匹配a
第三次 匹配abb 注意 由于是上面的组合 所以a一定只以出现一次
第四次 匹配ab
第五次 匹配ab
第六次 匹配ab
第七次 匹配a
第一次 匹配abbb
再次谢谢大家的回答 展开
3个回答
展开全部
但是是匹配软件只能匹配上a。 实际上不是这样的。
你的式子中没有必须的东西,所有东西都是可选的,也就是说你的式子能匹配任意文本(即使是“
空”-也就是位置。)因为*在这儿表示了“匹配0次成功”-其结果是成功的。。。明白吗?
你说“匹配软件只能匹配上a”那是你看到了a,你看不见的还有那些“位置”。我不知道你用的什么软件,理论上对于你的例子应该是全都匹配!!!
其执行过程是这样的:
首先用表达式 a寻找文本,得到a,表达式a报告成功,控制权将于表达式b;然后用b去寻找文本,得到b,控制权交于*;接着*告诉b需要尽可能多的匹配b,但是匹配不到也没有关系,于是b接着寻找,直至a处,这就找到了bbb,是吧,于是(b*)表达式报告成功。然后是表达式(a(b*))报告成功,对吧,而表达式(a(b*))又被*号所修饰,*要求这个表达式重复这个模式尽可能多次,但是找不着也没有关系,明白吧。此为第一轮尝试成功,成功位置在第二个a前!也就是得到字符串abbb。
第二轮开始,*号迫使整体尽量匹配。
首先用表达式 a寻找文本,得到a,表达式a报告成功;然后用b去寻找文本,b在a后并没有找到b无奈将控制权交于*,*说:“匹配不到没有关系,咱们不是主角”(其实是匹配0次成功),于是表达式(b*)就报告成功了;然后是表达式(a(b*))报告成功。此为第二轮成功结束,得到文本为a,成功位置在其后(也就是第三个a前)。
第三轮开始,*号迫使整体尽量匹配。
过程都是一样的。
据我观察该式一共进行4次迭代拿下所有文本。
第一次:abbb
第二次:a
第三次:abbababab
第四次:a
你使用的软件上应该有“替换”模式吧,你用你的式子对应你的文本使用“替换”模式看看都替换掉什么,再匹配替换一些其它文本,如:xyzopqrst2342等,你会明白一些问题。
你的式子中没有必须的东西,所有东西都是可选的,也就是说你的式子能匹配任意文本(即使是“
空”-也就是位置。)因为*在这儿表示了“匹配0次成功”-其结果是成功的。。。明白吗?
你说“匹配软件只能匹配上a”那是你看到了a,你看不见的还有那些“位置”。我不知道你用的什么软件,理论上对于你的例子应该是全都匹配!!!
其执行过程是这样的:
首先用表达式 a寻找文本,得到a,表达式a报告成功,控制权将于表达式b;然后用b去寻找文本,得到b,控制权交于*;接着*告诉b需要尽可能多的匹配b,但是匹配不到也没有关系,于是b接着寻找,直至a处,这就找到了bbb,是吧,于是(b*)表达式报告成功。然后是表达式(a(b*))报告成功,对吧,而表达式(a(b*))又被*号所修饰,*要求这个表达式重复这个模式尽可能多次,但是找不着也没有关系,明白吧。此为第一轮尝试成功,成功位置在第二个a前!也就是得到字符串abbb。
第二轮开始,*号迫使整体尽量匹配。
首先用表达式 a寻找文本,得到a,表达式a报告成功;然后用b去寻找文本,b在a后并没有找到b无奈将控制权交于*,*说:“匹配不到没有关系,咱们不是主角”(其实是匹配0次成功),于是表达式(b*)就报告成功了;然后是表达式(a(b*))报告成功。此为第二轮成功结束,得到文本为a,成功位置在其后(也就是第三个a前)。
第三轮开始,*号迫使整体尽量匹配。
过程都是一样的。
据我观察该式一共进行4次迭代拿下所有文本。
第一次:abbb
第二次:a
第三次:abbababab
第四次:a
你使用的软件上应该有“替换”模式吧,你用你的式子对应你的文本使用“替换”模式看看都替换掉什么,再匹配替换一些其它文本,如:xyzopqrst2342等,你会明白一些问题。
展开全部
*是0到无穷个
+是1到无穷个
b*可以是0个b 所以只匹配到a
b*改为b+
+是1到无穷个
b*可以是0个b 所以只匹配到a
b*改为b+
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
*表是 可有可无多少都无所谓
所以b*表示有没有b都可以通过,所以………………
估计你应该使用b+
所以b*表示有没有b都可以通过,所以………………
估计你应该使用b+
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询