这应该是显而易见的,但我遇到了麻烦。
我想用空字符串替换多个字符(破折号,空格,下划线),但我有些不对劲。
此代码:$tmp = preg_replace('/[ -_]/', '', 'filename-1055');
...返回:"filename"
......当我期待这个时:"filename1055"
为什么要截断?
答案 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');