【问题标题】:PHP Regex not matching escaped values correctlyPHP Regex 未正确匹配转义值
【发布时间】:2017-01-12 16:52:08
【问题描述】:

我有以下正则表达式在 https://regex101.com 中正确匹配,但在 PHP 中使用 preg_replace_callback 时不匹配。

(?<!\\)(?:\\\\)*{(.*?)(:(.*?))?}

它最有效,但似乎不适用于多级转义。文本处理示例(粗体正确匹配,斜体显示应该匹配和不匹配或匹配和不应该匹配的内容):

{intro} 敏捷的棕色 {animal} 跳过了懒惰的 {otherAnimal}。空的 {} 也应该匹配。 转义应该\{不匹配}。在 \\{应该匹配} 之前转义。 3 个转义应该\\\{不匹配}。 4 个转义 \\\\{应该匹配}

请注意,在 PHP 中,确切的代码是带有双斜杠的代码,因为它位于 PHP 字符串中:

preg_replace_callback('/(?<!\\\\)(?:\\\\\\\\)*{(.*?)(:(.*?))?}/',...

【问题讨论】:

  • 能否请您提供不起作用的确切代码?您可以使用ideone.com/aem3mV 链接。
  • 如果我记得,您可以使用一些修饰符,例如 '/some_regex/gm'
  • @Wiktor-Stribiżew 我尝试了您的代码并且它有效,所以要尝试找出其中的区别。
  • 我一大早睡了3个小时,所以肯定是ID10T错误!

标签: php regex preg-replace-callback


【解决方案1】:

感谢 Wiktor,我解决了这个问题。我在定义我的字符串时使用了 Heredoc 语法,所以所有的转义都被转义了。将字符串更改为使用 Nowdoc,现在一切都按预期工作。谢谢!

【讨论】:

    猜你喜欢
    • 2016-07-13
    • 1970-01-01
    • 2011-10-28
    • 2011-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多