Php正则表达式preg_替换命名捕获不工作

Php正则表达式preg_替换命名捕获不工作,php,regex,regex-group,Php,Regex,Regex Group,我想对字符串执行preg_替换并返回命名捕获,但命名捕获未显示。下面是我所做的 string = "{hello}/{world}" string = preg_replace("/\//", "/\/", string) string = preg_replace("/\{[a-z]+\}/", "(?P<\1>[a-z-]+)", string) 到 更多调试 问题在于替换模式中的中,如果删除它们,\1可以正常工作,但是如何使regex将视为文本而不是regex特殊字符。我

我想对字符串执行preg_替换并返回命名捕获,但命名捕获未显示。下面是我所做的

string = "{hello}/{world}"

string = preg_replace("/\//", "/\/", string)

string = preg_replace("/\{[a-z]+\}/", "(?P<\1>[a-z-]+)", string)

更多调试


问题在于替换模式中的<>中,如果删除它们,\1可以正常工作,但是如何使regex将<>视为文本而不是regex特殊字符。我试着用preg_quote和逃避它们,但没有成功这就是我如何逃离它们…

在使用前捕获群:

$string = preg_replace("/\{([a-z]+)\}/", "(?P<$1>[a-z-]+)", $string)
//                  here __^  & __^
$string=preg\u replace(“/\{([a-z]+)\}/”,“(?P[a-z-]+)”,$string)
//这里__^

看起来您的
[a-z]+
不在捕获组中。尝试用括号括起来。我只是这样做了,但仍然不起作用…t双引号文本中的\1不是反向引用。您必须将替换和正则表达式模式放在单引号文本中。是的,添加一个捕获组。仍然不工作…在本地主机上使用PHP7。。。
(?P<>[a-z-]+)\/(?P<>[a-z-]+)
(?P<{hello}>[a-z-]+)\/(?P<{world}>[a-z-]+)
\1
\0
$string = preg_replace("/\{([a-z]+)\}/", "(?P<$1>[a-z-]+)", $string)
//                  here __^  & __^