我有一个字符串,我想删除它的一部分:
string_string_string_240x670.bmp
string_string_string_550x450.bmp
string_string_string_250x950.bmp
我想删除数字部分240x670
。bmp
将成为:
string_string_string_.bmp
string_string_string_.bmp
string_string_string_.bmp
我试过了:
$a = preg_replace('[0-9]x[0-9]', '', $a);
但没有成功。
答案 0 :(得分:2)
只需使用
$a = preg_replace('/\d+x\d+/', '', $a);
答案 1 :(得分:2)
请注意,PHP正则表达式使用regex delimiters,并且您的正则表达式实际上解析为0-9]x[0-9
,因为配对的外部[...]
被视为分隔符。使用公共/.../
或~...~
来分隔模式。
由于你说这些文件的扩展名总是bmp
,我建议
'~_[0-9]+x[0-9]+\.bmp$~'
请参阅the demo
<强>详情:
_
- 下划线[0-9]+
- 一位或多位x
- x
[0-9]+
- 一位或多位\.
- 一个点bmp
- 文字字符串bmp
$
- 字符串结束。 如果扩展程序可以是任何,您还可以利用pathinfo
拆分路径并仅对文件名起作用:
$s = "string_string_string_240x670.bmp";
$p = pathinfo($s);
if (isset($p["filename"])) {
echo preg_replace('~_\d+x\d+$~', '_.', $p["filename"]) . $p["extension"];
}
此处,_\d+x\d+$
并不关心您拥有什么扩展程序,它只是替换最后的_
+ digits
+ x
+ digits
字符串(文件名)。
请参阅PHP demo
答案 2 :(得分:0)
正则表达式/\d+x\d+/g
适合您。
$re = "/\\d+x\\d+/";
$str = "string_string_string_240x670.bmp\nstring_string_string_550x450.bmp\nstring_string_string_250x950.bmp";
$subst = "";
$result = preg_replace($re, $subst, $str);
结果将是:
string_string_string_.bmp
string_string_string_.bmp
string_string_string_.bmp