【问题标题】:Regular expression matches more than expected正则表达式匹配超出预期
【发布时间】:2011-07-05 21:41:15
【问题描述】:

给出以下python脚本:

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

谁能解释一下为什么第一次使用正则表达式.??[?]?[?] 返回&lt;? 而不仅仅是?

我的解释:

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

这应该导致? 而不是&lt;?

【问题讨论】:

    标签: python regex pattern-matching


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      正则表达式“贪婪”只影响回溯;这并不意味着正则表达式引擎会跳过较早的潜在匹配点——正则表达式 always 会选择第一个可能的匹配项。在这种情况下,这意味着&lt;?,因为它比? 更靠左。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-10-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-26
        • 2011-08-24
        相关资源
        最近更新 更多