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

时间:2015-03-20 15:25:19

标签: php preg-replace

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

我想用空字符串替换多个字符(破折号,空格,下划线),但我有些不对劲。

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

...返回:"filename"

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

为什么要截断?

4 个答案:

答案 0 :(得分:2)

请尝试str_replace

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

除非出于特殊原因使用preg_replace

答案 1 :(得分:1)

尝试这种方式,DEMO

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

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

答案 2 :(得分:1)

在字符类中,短划线-是范围运算符,因此您的类[ -_]表示(空格)到_范围内的任何字符。

您有两种可能性:

1-在字符类的第一个或最后一个位置移动短划线:[- _][ _-]
2-或逃脱它:[ \-_]

答案 3 :(得分:0)

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

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