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];
答案 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
?>