正则表达式中d+?/与d+/的区别是什么?
正则表达式中
+?的作用:贪婪与非贪婪匹配的区别 核心差异
d+是贪婪匹配:会尽可能多地匹配符合d规则的字符,直到无法继续匹配,再尝试匹配后续的/。d+?是非贪婪(惰性)匹配:会尽可能少地匹配符合d规则的字符,只要能让后续的/匹配成功就立即停止。
你的测试案例结果一致的原因
你用的测试字符串是dddddddddedd/,末尾的/前面只有连续两个d:
- 贪婪模式
d+/扫描时,会尝试匹配尽可能多的d,但最后能和/衔接的连续d只有末尾这两个,所以最终匹配dd/。 - 非贪婪模式
d+?/先匹配1个d,检查后发现不是/,就多匹配1个d,此时后面正好是/,于是停止匹配,结果也是dd/。
换个例子看明显差异
如果测试字符串换成dddd/:
- 用
d+/匹配(贪婪):d+会把所有4个d都匹配到,再加上后面的/,最终结果是dddd/。 - 用
d+?/匹配(非贪婪):d+?只匹配1个d,就发现后面是/,直接停止,最终结果是d/。
再比如字符串dd/ddd/(开启全局匹配):
d+/会匹配dd/和ddd/,每段都取尽连续的d后再匹配/。d+?/会匹配dd/和d/,第二段里只拿1个d就遇到/,直接停止。
内容的提问来源于stack exchange,提问作者Rickyforcode
相关产品推荐
相关产品推荐

