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