带有量词的正则表达式也可能涉及到所谓的回溯过程.为了匹配正则表达式,必须匹配整个表达式,而不是某个部分.如果包含量词的模式开头部分发挥了作用,但使得模式的以后部分失败,则perl将倒退并从开头处重新开始(这就是称之为回溯的原因)
使用道具 举报
…… 一个更原始的调试解决方法是,使用(?{ CODE })子模打印出在匹配过程中的某时刻已经匹配了什么东西: "abcdef" =~ / .+ (?{print "Matched so far: $&\n"}) bcdef $/x; 复制代码 打印出: Matched so far: abcdef Matched so far: abcde Matched so far: abcd Matched so far: abc Matched so far: ab Matched so far: a 复制代码 显示出.+先抢占所有字母,然后在引擎回溯的时候一个一个地放弃。
ps:,这就是传说中的正则表达式(量词)的贪婪性吧~
本版积分规则 发表回复 回帖后跳转到最后一页