给出以下python脚本:
text = '<?xml version="1.24" encoding="utf-8">'
mu = (".??[?]?[?]", "....")
for item in mu:
print item,":",re.search(item, text).group()
有人可以解释为什么第一次点击正则表达式.??[?]?[?]
会返回<?
而不只是?
。
我的解释:
.??
应匹配任何内容,因为.?
可以匹配或不匹配任何字符,第二个?
使其不贪婪。[?]?
可以匹配?
或不匹配,所以没有什么是好的[?]
只匹配?
这应该导致?
而不是<?
答案 0 :(得分:3)
出于同样的原因o*?bar
匹配oobar
中的foobar
。即使量词是非贪婪的,正则表达式将尝试以所有可能的方式匹配第一个字符,然后再继续下一个字符。
首先.??
匹配一个空字符串,但当正则表达式引擎回溯到它时,它匹配<
,从而使正则表达式的其余部分匹配,而不将匹配的开始位置移动到下一个角色。
答案 1 :(得分:2)
正则表达式“贪婪”只影响回溯;这并不意味着正则表达式引擎会跳过更早的潜在匹配点 - 正则表达式总是采取第一个可能的匹配。在这种情况下,这意味着<?
因为它比?
更向左开始。