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


regex get last two paths of directory

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];     
我认为

您当前的方法很好 - 它简洁,有意义,而且不过分复杂。

如果你想使用正则表达式,

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

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

'1_'2组将是您的$myvar.

正则表达式查找从/开始的字符串位,并且在字符串中正好有 1 个/(除非字符串末尾有一个没有后续文本的/,在这种情况下,您可以有一个额外的(。(请注意正则表达式中的"$",意思是"字符串的结尾"(。

有一种不那么丑陋(而且可能更快(的方法。

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

或者你可以这样做:

<?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
?>
preg_match('%/([^/]+)/([^/]+)/(?!.*/)%', $subject, $result)

我使用了负面的展望来确保匹配只选择最后一个块