得到240x670字符串并删除?

时间:2016-08-02 10:44:32

标签: php regex

我有一个字符串,我想删除它的一部分:

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);

但没有成功。

3 个答案:

答案 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

Demo and Explaination