我的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-]+)
我怎么能这样做?
您的代码生成正确的结果,即
(?P<controller>[a-z-]+)\/(?P<action>[a-z-]+)
问题是:当你echo
出来并在浏览器中显示它时,浏览器将<controller>
和<action>
解释为HTML标签,如<p>
或<strong>
。所以,它不显示它们;它只显示剩下的内容:
(?P[a-z-]+)\/(?P[a-z-]+)
如果从命令行运行此脚本,您将看到正确的结果。要使其在浏览器中工作,您需要用最后一行替换
echo htmlentities(preg_replace($pattern, $replacement, $string));