У меня есть файл whatever_files_123456.ext
. Мне нужно прочитать только номер после последнего подчеркивания в имени файла. Имя файла может содержать много символов подчеркивания. Меня беспокоит только номер после последнего подчеркивания и перед .ext. В этом случае это 123456
Попробуй это:
preg_replace("/.*\_(\d+)(\.[\w\d]+)?$/", "$1", $filename)
Нет необходимости в регулярных выражениях:
$parts = explode('_', $filename); $num = (int)end($parts);
Это взорвет имя файла на части, основанные на подчеркивании. Затем преобразуйте последний элемент в значение int (быстрый способ удалить расширение).
Если номер всегда в конце, он может быстрее использовать explode
чтобы разбить имя на символы подчеркивания, захватить последний элемент из списка и удалить «.ext». Подобно:
<?php $file = 'whatever_files_123456.ext'; $split_up = explode('_', $file); $last_item = $split_up[count($split_up)-1]; $number = substr($last_item, 0, -4);
Но, если вы хотите использовать preg_match, это будет трюк:
<?php $file = 'whatever_files_123456.ext'; $regex = '/_(\d+).ext/'; $items = array(); $matched = preg_match($regex, $file, $items); $number = ''; if($matched) $number = $items[1];
Если номер всегда появляется после последнего подчеркивания, вы должны использовать:
$underArr=explode('_', $filename); $arrSize=count($underArr)-1; $num=$underArr[$arrSize]; $num=str_replace(".ext","",$num);
$pattern = '#.*\_([0-9]+)\.[az]+$#'; $subject = 'whatever_files_123456.ext'; $matches = array(); preg_match($pattern, $subject,$matches); echo $matches[1]; // this is want u want