php регулярное выражение как получить последнюю часть строки

У меня есть файл 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