Удалить последнюю часть строки после подчеркивания и случайной цифры - PullRequest
0 голосов
/ 30 мая 2019

Моя строка выглядит как

$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 ]

4 голосов
/ 31 мая 2019

Основываясь на коде, который я видел в ссылке на 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 до"мой", прежде чем вы использовали preg_replace на нем.Так как у «my» нет подчеркиваний или чисел, это регулярное выражение ничего не соответствует, поэтому ничего не было заменено, и вы просто получили то же «my».

2 голосов
/ 30 мая 2019

Мы могли бы просто использовать простое выражение с preg_replace или preg_match или preg_match_all:

_[0-9].+

Test

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

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

echo $result;

Output

my_beautiful_picture

DEMO

Схема RegEx

jex.im визуализирует регулярные выражения:

enter image description here

...