【发布时间】: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