使用pregex提取最后2个斜杠之间的内容

时间:2012-02-02 23:46:26

标签: php regex

我有像

这样的网址
  

/blah/WHATEVER/sites/two/one/blah/need/this.ini

在PHP中,如何使用正则表达式提取/need/this.ini?

3 个答案:

答案 0 :(得分:3)

$url = '/blah/WHATEVER/sites/two/one/blah/need/this.ini';
$array = explode('/',$url);
$rev = array_reverse($array);
$last = $rev[0];
$second_last = $rev[1];
// or $rev[1].'/'.$rev[0]

再长一点,我确信有比这更好,更清晰的方法。无论如何,只是说你不需要这种东西的正则表达式。正则表达式不是解决所有问题的方法:)

如果你不需要数组完整,你也可以使用array_pop()两次,每次获得最后一个元素。但是你每次都会将数组缩短一个元素。

此外:

    $url = '/blah/WHATEVER/sites/two/one/blah/need/this.ini';
    $array = explode('/',$url);
    $last = end($array);
    $second_last = prev($array);

请参阅it in action

答案 1 :(得分:0)

这应该做:

(/[^/]+/[^/]+)$

(虽然不会检查转义斜线。)

答案 2 :(得分:0)

请注意#而不是/

if (preg_match('#/?[^/]+?/?[^/]+$#', $path, $m) !== false) {
  // $m[0]` will contain the desired part
} 

但是有更好的方法可以做到这一点 - 根本不要使用正则表达式:

function extract_part($path) {
  $pos = strrpos( $path, '/');
  if ($pos > 0) { // try to find the second one
    $npath = substr($path, 0, $pos-1);
    $npos = strrpos($npath, '/');
    if ($npos !== false) {
      return substr($path, $npos);
    } 
    // This is not error, uncomment to change code behaviour.
    /*else { // Returns '/this.ini' in your case
      return substr($path, $pos);
    }*/
  }

  // Returns as is
  return $path;
}

(我手上没有php解释器,因此未检查代码)。 是的,有一个错误:)现在它已修复。