Php regex获取目录的最后两个路径

Php regex获取目录的最后两个路径,php,regex,Php,Regex,我正在尝试检索由/分隔的最后两个元素,以便我可以执行此操作 $myvar=“a_a”;。可能会有一个结局,也可能不会。它需要双向运作 我有以下工作,但它是相当丑陋的,否则我怎么做呢 Given http://host/test/google/oop/a/a 我认为你目前的方法是好的——它简洁、有意义,而且不太复杂 如果您想使用regex,可以尝试使用regex(@是分隔符,而不是/,它使转义变得更简单): 组\1\u2将是您的$myvar 正则表达式查找从/开始的字符串位,并且字符串中正好还有

我正在尝试检索由/分隔的最后两个元素,以便我可以执行此操作 $myvar=“a_a”;。可能会有一个结局,也可能不会。它需要双向运作

我有以下工作,但它是相当丑陋的,否则我怎么做呢

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

我认为你目前的方法是好的——它简洁、有意义,而且不太复杂

如果您想使用regex,可以尝试使用regex(@是分隔符,而不是
/
,它使转义变得更简单):

\1\u2
将是您的
$myvar

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

有一种不那么难看(可能更快)的方法


我使用了一种消极的前瞻性,以确保匹配只选择最后一个块。或者,您可以这样做:

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

快速破解方法是在斜杠上分解URL,然后查看数组的最后两个索引。
@/([^/]+)/([^/]+)/?$@
implode('_', array_slice(explode('/', rtrim($url, '/')), -2, 0))
preg_match('%/([^/]+)/([^/]+)/(?!.*/)%', $subject, $result)
<?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
?>