为什么preg_replace()函数不能正常工作?

时间:2017-07-26 01:51:03

标签: preg-replace

我的PHP脚本是:

<?php
    $string = '{controller}/{action}';
    $pattern = '/\{([a-z]+)\}/i';
    $replacement = '(?P<$1>[a-z-]+)';
    echo preg_replace($pattern, $replacement, $string);
?>

显示此结果:

(?P[a-z-]+)\/(?P[a-z-]+)

我期待这个:

(?P<controller>[a-z-]+)\/(?P<action>[a-z-]+)

我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

您的代码会生成正确的结果,即

(?P<controller>[a-z-]+)\/(?P<action>[a-z-]+)

问题是:当您echo将其显示并在浏览器中显示时,浏览器会将<controller><action>解释为HTML标记,例如<p>或{{ 1}}。所以,它不显示它们;它只显示剩下的内容:

<strong>

如果从命令行运行此脚本,您将看到正确的结果。要使其在浏览器中工作,您需要用

替换最后一行
(?P[a-z-]+)\/(?P[a-z-]+)
相关问题