删除下划线和随机数字后字符串的最后一部分
Remove the last part of a string after underscore and random digit
我的字符串看起来像
$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
,我对正则表达式不是很熟悉。
我们可以简单地使用一个简单的表达式 preg_replace
或 preg_match
或 preg_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
正则表达式电路
jex.im 可视化正则表达式:
根据我在您之前发布的 ideone link 中看到的代码,我知道可能发生了什么。如果你以前这样尝试过:
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
减少到 "my" 在你使用 preg_replace
之前。由于 "my" 没有任何下划线或数字,该正则表达式不匹配任何内容,因此没有任何内容被替换,您最终得到相同的 "my".
我的字符串看起来像
$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
,我对正则表达式不是很熟悉。
我们可以简单地使用一个简单的表达式 preg_replace
或 preg_match
或 preg_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
正则表达式电路
jex.im 可视化正则表达式:
根据我在您之前发布的 ideone link 中看到的代码,我知道可能发生了什么。如果你以前这样尝试过:
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
减少到 "my" 在你使用 preg_replace
之前。由于 "my" 没有任何下划线或数字,该正则表达式不匹配任何内容,因此没有任何内容被替换,您最终得到相同的 "my".