删除下划线和随机数字之后的字符串的最后一部分

时间:2019-05-30 20:06:14

标签: php regex preg-replace strpos

我的字符串看起来像

$img_name = "my_beautiful_picture_123456_789101112131415_16171819202122.jpg"

从第一个下划线然后到最后一个数字的最简单删除方法是什么?

我想输出

my_beautiful_picture

我尝试过

$img_name = substr($img_name, 0, strpos($img_name, "_"));

$img_name = preg_replace('/_[0-9].*/', '', $img_name);

但是两者的结果都是my,我对正则表达式不是很熟悉。

2 个答案:

答案 0 :(得分:3)

根据我在您之前发布的ideone链接中看到的代码,我知道可能会发生什么。如果您以前这样尝试过:

echo $img_name2 = "my_beautiful_picture_123456_789101112131415_16171819202122.jpg";
echo " | ";
echo $img_name2 = substr($img_name2, 0, strpos($img_name2, "_"));
echo " | ";
echo $img_name2 = preg_replace('/_[0-9].*/', '', $img_name2);

preg_replace 看起来像无效的原因是,在您使用{之前,先前的substr已经将$img_name2还原为“我的” {1}}。由于“我的”没有任何下划线或数字,因此该正则表达式不匹配任何内容,因此没有替换任何内容,因此您最终得到了相同的“我的”。

答案 1 :(得分:2)

我们可以简单地将简单表达式与preg_replacepreg_matchpreg_match_all一起使用:

_[0-9].+

测试

$re = '/_[0-9].+/s';
$str = 'my_beautiful_picture_123456_789101112131415_16171819202122.jpg';
$subst = '';

$result = preg_replace($re, $subst, $str);

echo $result;

输出

my_beautiful_picture

DEMO

RegEx电路

jex.im可视化正则表达式:

enter image description here