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

input:Twasbrilling,andtheslithytovesregex:and|And\b\w+find():andstart=15end=18不理解为什么就... input: Twas brilling, and the slithy toves
regex: and|And\b\w+
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
??不是勉强的么?为什么还是匹配了一个.?
展开
 我来答
lifecursor
2012-07-14 · TA获得超过221个赞
知道小有建树答主
回答量:128
采纳率:0%
帮助的人:166万
展开全部
呃,
第一个问题。
and|And\b\w+在你给的文本中只能匹配and,也就是说你的表达式只有前半部分生效了。原因有2:
第一,你的表达式有两部分,and和AND\b\w+引擎首先用第一部分去对目标文本检索,如果不成功才会用第二部分。而引擎在15-18的位置第一部分发现了and字符串,就报告成功了,忽略了第二部分的检索。
第二,你的表达式的第二部分在你的目标文本中是永远不会成功的。原因在于\b后需要匹配至少一个\w,而\b后是空格故\w匹配失败,第二部分整体失败。

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

结论:无论是勉强的还是积极的,它们都是为全局服务的,当有人迫使它们使用机会(勉强)亦或是放弃得到(积极)时,它们会义无反顾。引擎一定要尝试所有的可能才会报告最终结果,明白吧。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式