我想对字符串执行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
更多调试
问题在于&lt; &GT;在替换模式中,如果我删除它们\ 1工作正常,但我如何使正则表达式看到&lt; &GT;作为文字,而不是正则表达式的特殊字符。我试过preg_quote并逃避它们,没有工作。 \&LT;我是如何逃避他们的......
答案 0 :(得分:0)
在使用之前捕获该组:
$string = preg_replace("/\{([a-z]+)\}/", "(?P<$1>[a-z-]+)", $string)
// here __^ & __^