PHP регулярное выражение, как я могу получить последнюю часть строки - PullRequest
1 голос
/ 04 октября 2011

У меня есть файл whatever_files_123456.ext.Мне нужно прочитать только число после последнего подчеркивания в имени файла.Имя файла может содержать много подчеркиваний.Я забочусь только о числе после последнего подчеркивания и перед .ext.В данном случае это 123456

Ответы [ 5 ]

8 голосов
/ 04 октября 2011

Нет необходимости в регулярных выражениях:

$parts = explode('_', $filename);
$num = (int)end($parts);

При этом имя файла будет разбито на части на основе подчеркивания. Затем преобразуйте последний элемент в значение типа int (быстрый способ удалить расширение).

2 голосов
/ 04 октября 2011
$pattern = '#.*\_([0-9]+)\.[a-z]+$#';
$subject = 'whatever_files_123456.ext';
$matches = array();

preg_match($pattern, $subject,$matches);

echo $matches[1]; // this is want u want
2 голосов
/ 04 октября 2011

Если число всегда появляется после последнего подчеркивания, вы должны использовать:

$underArr=explode('_', $filename);
$arrSize=count($underArr)-1;
$num=$underArr[$arrSize];
$num=str_replace(".ext","",$num);
2 голосов
/ 04 октября 2011

Попробуйте это:

preg_replace("/.*\_(\d+)(\.[\w\d]+)?$/", "$1", $filename)
2 голосов
/ 04 октября 2011

Если число равно всегда в конце, может быть быстрее использовать 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];
...