【发布时间】:2015-06-14 14:14:31
【问题描述】:
我正在尝试从字符串中删除所有非数字、非单词字符(连字符除外)以创建 URI 存根。我有以下代码:
$urlPrefix = strtolower($this->urlPrefix.(substr($this->urlPrefix, -1) == '-' ? '' : '-'));
$urlPrefix = preg_replace('#\s+#', '-', $urlPrefix);
var_dump($urlPrefix);
$urlPrefix = preg_replace('#[^\d\w\s-]#g', '', $urlPrefix);
var_dump($urlPrefix); exit;
如果我设置$this->urlPrefix = "Test replace$%^*";,那么第一个var_dump($urlPrefix) 按预期输出test-replace$%^*-,但第二个转储输出NULL,但我看不出我的正则表达式有什么问题,有人可以帮我吗?为什么preg_replace 会出错?
【问题讨论】:
-
/g不是 PCRE 的有效正则表达式标志。启用error_reporting。 -
我确实启用了
error_reporting,因为它是一个开发服务器,所以它是强制的。不知道为什么它没有显示该错误。 -
那么可能是
display_errors不知何故被禁用了。作为最后的手段,你可以经常临时尝试set_error_handler("var_dump");。 -
如果返回
null,请使用preg_last_error_msg()获取正则表达式错误。
标签: php regex preg-replace