php正则表达式如何获取字符串的最后一部分

时间:2011-10-04 01:39:02

标签: php string preg-replace

我有一个文件whatever_files_123456.ext。我需要读取文件名中最后一个下划线后面的数字。文件名可以包含许多下划线。我只关心最后一个下划线之后和.ext之前的数字。在这种情况下,它是123456

5 个答案:

答案 0 :(得分:8)

不需要正则表达式:

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

这会根据下划线将文件名分解为 parts 。然后将最后一项转换为int值(快速删除扩展名)。

答案 1 :(得分:2)

如果数字总是,那么使用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];

答案 2 :(得分:2)

试试这个:

preg_replace("/.*\_(\d+)(\.[\w\d]+)?$/", "$1", $filename)

答案 3 :(得分:2)

如果数字始终出现在最后一个下划线之后,您应该使用:

$underArr=explode('_', $filename);
$arrSize=count($underArr)-1;
$num=$underArr[$arrSize];
$num=str_replace(".ext","",$num);

答案 4 :(得分:2)

$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