Php正则表达式preg_replace名为capture不起作用

时间:2016-08-05 12:30:02

标签: php regex regex-group

我想对字符串执行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;我是如何逃避他们的......

1 个答案:

答案 0 :(得分:0)

在使用之前捕获该组:

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