preg_replace(): 为什么要截断这个字符串?

preg_replace(): why is it truncating this string?

这应该是显而易见的,但我遇到了麻烦。

我想用空字符串替换几个字符(破折号、空格、下划线),但我出错了。

此代码:$tmp = preg_replace('/[ -_]/', '', 'filename-1055');

...returns 这个:"filename"

...当我期待这个时:"filename1055"

为什么要截断?

请尝试 str_replace

$tmp = str_replace(array("-", "_", " "), "", 'filename-1055');

除非您有特殊原因使用 preg_replace

这是因为你没有用\-转义-[]内的范围运算符)。正确的代码是:

$tmp = preg_replace('/[ \-_]/', '', 'filename-1055');

试试这个方法,DEMO

$re = "/([-\s_])/"; 
$str = "filename-1055\n"; 
$subst = ""; 

$result = preg_replace($re, $subst, $str, 1);

在字符class中,破折号-是范围运算符,所以你的class[ -_]表示范围[=中的任何字符24=] (space) 到 <code>_.

你有两种可能:

1- 将破折号移动到字符 class 的第一个或最后一个位置:[- _][ _-]
2- 或者转义它:[ \-_]