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


preg_replace(): why is it truncating this string?

这应该很明显,但我遇到了麻烦。

我想用一个空字符串替换几个字符(短划线、空格、下划线),但我有问题。

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

返回此:"filename"

当我期待这个:"filename1055"

为什么要截断?

改为尝试str_replace

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

除非有特殊原因,否则您将使用preg_replace

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

你有两种可能性:

1-将破折号移动到字符类的第一个或最后一个位置:[ _-][ '-_]
2-或退出:-

试试这种方法,DEMO

$re = "/([-''s_])/"; 
$str = "filename-1055'n"; 
$subst = ""; 
$result = preg_replace($re, $subst, $str, 1);

这是因为您没有用CCD_15转义[]'-中的范围运算符)。正确的代码是:

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