preg_replace返回null,看不到我的RegExp的错误

时间:2015-04-09 09:27:40

标签: php regex preg-replace

我试图从字符串中删除所有非数字,非单词字符(连字符除外)以创建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出错?

1 个答案:

答案 0 :(得分:1)

g无法与preg_replace一起使用。在这里,sample code可以正常工作:

<?php
   $urlPrefix = "test-replace$%^*-";
   $urlPrefix = strtolower($urlPrefix.(substr($urlPrefix, -1) == '-' ? '' : '-'));
   $urlPrefix = preg_replace('#\s+#', '-', $urlPrefix);
   var_dump($urlPrefix);
   $urlPrefix = preg_replace('#[^\d\w\s-]#', '', $urlPrefix);
   var_dump($urlPrefix);
   exit;
?>

输出:

string(17) "test-replace$%^*-"                                                                                                                                                                                                                         
string(13) "test-replace-"