-1
我想对字符串执行preg_replace并返回命名捕获,但命名的捕获不显示。下面是我做了什么......Php正则表达式preg_replace命名捕获不起作用
string = "{hello}/{world}"
string = preg_replace("/\//", "/\/", string)
string = preg_replace("/\{[a-z]+\}/", "(?P<\1>[a-z-]+)", string)
以上,有望成为:
(?P<hello>[a-z-]+)\/(?P<world>[a-z-]+)
但我只得到:
(?P<>[a-z-]+)\/(?P<>[a-z-]+)
命名捕获没有出现。
编辑
我越来越:
(?P<{hello}>[a-z-]+)\/(?P<{world}>[a-z-]+)
如果我改变
\1
到
\0
更多的调试
的问题是,在替换模式的<>,如果我删除它们\ 1工作正常,但如何让我的正则表达式看到<>为文字而不是regex的特殊字符。我尝试preg_quote并逃脱他们,不工作。 \ <是我如何逃脱他们...
它看起来像你的'[A-Z] +'是不是在一个捕获组。尝试用括号围绕它。 – jrahhali
我只是这样做,仍然没有工作... –
双引号文字中的\ 1不是反向引用。您必须将替换和正则表达式模式放在单引号文字中。是的,添加一个捕获组。 –