我有像
这样的网址/blah/WHATEVER/sites/two/one/blah/need/this.ini
在PHP中,如何使用正则表达式提取/need/this.ini?
答案 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解释器,因此未检查代码)。
是的,有一个错误:)现在它已修复。