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

preg_replace returning null, can't see an error with my RegExp

我正在尝试从字符串中去除所有非数字、非单词字符(连字符除外)以创建 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 不能与 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-"