正则表达式匹配超过预期

时间:2011-07-05 21:41:16

标签: python regex pattern-matching

给出以下python脚本:

text = '<?xml version="1.24" encoding="utf-8">'
mu = (".??[?]?[?]", "....")
for item in mu:
    print item,":",re.search(item, text).group()

有人可以解释为什么第一次点击正则表达式.??[?]?[?]会返回<?而不只是?

我的解释:

  • .??应匹配任何内容,因为.?可以匹配或不匹配任何字符,第二个?使其不贪婪。
  • [?]?可以匹配?或不匹配,所以没有什么是好的
  • [?]只匹配?

这应该导致?而不是<?

2 个答案:

答案 0 :(得分:3)

出于同样的原因o*?bar匹配oobar中的foobar。即使量词是非贪婪的,正则表达式将尝试以所有可能的方式匹配第一个字符,然后再继续下一个字符。

首先.??匹配一个空字符串,但当正则表达式引擎回溯到它时,它匹配<,从而使正则表达式的其余部分匹配,而不将匹配的开始位置移动到下一个角色。

答案 1 :(得分:2)

正则表达式“贪婪”只影响回溯;这并不意味着正则表达式引擎会跳过更早的潜在匹配点 - 正则表达式总是采取第一个可能的匹配。在这种情况下,这意味着<?因为它比?更向左开始。