正则表达式获取目录的最后两个路径

时间:2012-02-20 05:14:57

标签: php regex

Given
http://host/test/google/oop/a/a

我正在尝试检索由/我分开的最后两个元素 $ myvar =“a_a”;。可能有一个结局/或不需要双向工作。

我有以下工作,但它非常丑陋,我怎么能这样做?

$href = preg_split("/[\/]+/", "http://host/test/google/oop/a/a");
$myvar = $href[count($href)-3] . "_" . $href[count($href)-2];     

4 个答案:

答案 0 :(得分:3)

我认为你现在的方法很好 - 它简洁,有意义,而且不会过于复杂。

如果你想使用正则表达式,你可以尝试正则表达式(@是分隔符而不是/,它使转义更简单一点):

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

群组\1_\2将是您的$myvar

正则表达式查找字符串中从/开始并在字符串中只有1 /的字符串(除非字符串末尾有/没有以下文字,在这种情况下你可以有一个额外的)。 (注意正则表达式中的'$'表示“字符串结束”)。

答案 1 :(得分:2)

有一点不那么丑陋(可能更快)的方式。

implode('_', array_slice(explode('/', rtrim($url, '/')), -2, 0))

答案 2 :(得分:1)

preg_match('%/([^/]+)/([^/]+)/(?!.*/)%', $subject, $result)

我使用了负向前看以确保匹配仅选择最后一个块

答案 3 :(得分:1)

或者你也可以这样做:

<?php 
$link = 'http://host/test/google/oop/a/a';

$linkParts=explode('/',rtrim($link,'/'));
$count=count($linkParts);

$desired = $linkParts[$count-2].'_'.$linkParts[$count-1];

echo $desired; //a_a
?>