java下面这个正则表达式为什么是这样匹配?

java下面这个正则表达式为什么是这样匹配?
input:Twas brilling,and the slithy toves
regex:and|Andbw+
find():and start=15 end=18
不理解为什么就匹配了一个and.难道\b不是单词边界么?
还有这个也不理解……
input:Did gyre and gimble in the wabe.
regex:w+W?$
find():wabe.start=27 end=32
不是勉强的么?为什么还是匹配了一个.
coffeehjj 1年前 已收到1个回答 举报

wanlisky 幼苗

共回答了13个问题采纳率:84.6% 举报

呃,
第一个问题.
and|Andbw+在你给的文本中只能匹配and,也就是说你的表达式只有前半部分生效了.原因有2:
第一,你的表达式有两部分,and和ANDbw+引擎首先用第一部分去对目标文本检索,如果不成功才会用第二部分.而引擎在15-18的位置第一部分发现了and字符串,就报告成功了,忽略了第二部分的检索.
第二,你的表达式的第二部分在你的目标文本中是永远不会成功的.原因在于b后需要匹配至少一个w,而b后是空格故w匹配失败,第二部分整体失败.


第二个事儿:
?是勉强的,不错.可它表达的意思是:能不匹配就不匹配,不能不匹配我还是要匹配.
分析你的结果,wabe.是吧.
w+拿下wabe
W?首先放弃对.的匹配,对吧,控制权交给后面的$
$试图寻找文本结尾,可是它却找到了.是吧.怎么办呢?此时它对W?说,你不是放弃了一次机会嘛,你用上吧,这样没准咱就成功了.W?听了觉得有道理,于是控制权又回到它那,它把.拿下,然后$匹配到了文本结尾.
整体报告成功.

结论:无论是勉强的还是积极的,它们都是为全局服务的,当有人迫使它们使用机会(勉强)亦或是放弃得到(积极)时,它们会义无反顾.引擎一定要尝试所有的可能才会报告最终结果,明白吧.

1年前

9
可能相似的问题
Copyright © 2024 YULUCN.COM - 雨露学习互助 - 16 q. 0.034 s. - webmaster@yulucn.com