preg_replace()返回空字符串

Chr*_*ris 0 php regex preg-replace

preg_replace()为以下代码行返回一个空字符串.目的是用连字符替换任何不是数字的东西.通过在线测试器,我相信正则表达式捕获了正确的东西,但由于某种原因,这一行总是返回一个空字符串.

preg_last_error()不返回任何错误.有什么建议?

$subRef = preg_replace("/[^(\d)]/g", "-", $subRef);
Run Code Online (Sandbox Code Playgroud)

Mar*_*c B 5

尝试

preg_replace('/\D/', '-', $subRef);
Run Code Online (Sandbox Code Playgroud)

代替.\D是"不是一个数字"

php > $foo = 'abc123def';
php > echo preg_replace('/\D/', '-', $foo);
---123---
Run Code Online (Sandbox Code Playgroud)


Chr*_*ris 5

对于在Google上发现此问题的人来说,问题是我的g旗帜.

据我所知,PHP没有global标志,因为您使用的函数决定了正则表达式是否为全局.

在对这个问题的评论中对马里奥的这个答案表示赞赏.