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- 或者转义它:[ \-_]
这应该是显而易见的,但我遇到了麻烦。
我想用空字符串替换几个字符(破折号、空格、下划线),但我出错了。
此代码:$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- 或者转义它:[ \-_]