代码之家  ›  专栏  ›  技术社区  ›  Derek Illchuk

php preg_replace:帮我摸索(?=:)

  •  1
  • Derek Illchuk  · 技术社区  · 16 年前

    another question ,有以下行:

    $value='x-Cem-Date:Wed, 16 Dec 2009 15:42:28 GMT';
    $value = preg_replace('/(^.+?)(?=:)/e', "strtolower('\\1')", $value);
    // yields 'x-cem-date:Wed, 16 Dec 2009 15:42:28 GMT'
    

    (?=:) 位表示对冒号的搜索,它必须。但是,我不理解这种特殊的语法, ?= . 那里到底发生了什么?

    1 回复  |  直到 16 年前
        1
  •  5
  •   Joey Gumbo    16 年前

    那是一个 positive lookahead . 它检查是否出现特定的子表达式 之后 那一点。但它没有 消费 匹配的任何内容:

    积极的展望同样有效。 q(?=u) 匹配A q 后面跟着一个 u ,而不是 U 比赛的一部分。正前视结构是一对圆括号,左括号后跟问号和等号。艾斯 RegularExpressions.info

    正如您可能注意到的,当替换文本时,lookaround特别有用,因为您不需要将周围环境包含到替换文本中。例如,替换 Q 后面不是 U 具有 qu 你可以做到

    replace 'q([^u])' by 'qu\1'
    

    但这会捕获以下字符,因为它是匹配的一部分,稍后会重新插入。您还可以使用lookaround:

    replace 'q(?!u)' by 'qu'
    

    其中只匹配和替换Q,因此在替换字符串中包含部分匹配不再是必需的。

    推荐文章