为何正则表达式从末尾匹配第二个捕获组?如何实现首个匹配?
正则匹配过长的问题原因及解决办法
这是正则表达式的贪婪匹配特性导致的,不属于写法错误,是正则的默认行为。
正则里的*、+这类量词默认是「贪婪模式」——会尽可能匹配最长的符合规则的文本。比如你用(the).*(te)时,.*会从第一个the之后开始,一直匹配到文本里最后一个te的前一个字符,最终得到从第一个the到最后一个te的长片段,这就是贪婪模式在起作用。
针对你这种用户输入的(word1).*(word2).*(word3)模式,解决办法很简单:把贪婪的.*改成非贪婪的.*?,也就是用(word1).*?(word2).*?(word3)。非贪婪量词会尽可能匹配最短的符合条件的文本,这样就能精准匹配到第一个word1之后的第一个word2,再之后的第一个word3,得到你想要的短片段。
举个实际例子:如果测试文本是The cat ate the cake, then the dog ate the treat,用(the).*(te)(不区分大小写)会匹配从开头The到结尾treat里的te的整段内容;换成(the).*?(te)后,就会匹配The cat ate(第一个te在ate里),完全符合你要的短片段需求。
内容的提问来源于stack exchange,提问作者SerjantArbuz
相关产品推荐
相关产品推荐

