我有一个网址, - “http://example.com/sales/view/id/705
”,我需要获得最后一段(705)。
如何使用PCRE执行此操作?
答案 0 :(得分:6)
这应该在Perl中执行:
my ($last) = $url =~ /([^\/]+)\z/;
但我宁愿使用URI
模块:
my $last = (URI->new($url)->path_segments)[-1];
答案 1 :(得分:4)
(在PHP中)我不会将PCRE用于这样一个微不足道且毫不含糊的工作。我会这样做:
$parts = explode('/', rtrim($url, '/'));
$partYouWant = array_pop($parts);
修改强>
如果你需要使用PCRE(虽然我不知道你为什么会这样做),这个eugene y答案的变化会这样做:
$pattern = '#/([^/]+)\z#';
$url = 'http://example.com/sales/view/id/705';
preg_match($pattern, $url, $matches);
echo $matches[1];
答案 2 :(得分:4)
在PHP中,您可以使用单行代码执行此操作:
$url = 'http://example.com/sales/view/id/705';
substr($url, strrpos($url, '/') + 1);
答案 3 :(得分:2)
非PCRE替代方案:
$url="http://example.com/sales/view/id/705";
$lastPart = current(array_reverse((explode('/',parse_url($url,PHP_URL_PATH)))));
怀疑它是否更快
答案 4 :(得分:2)
您可以将此模式([^\/]*)$
用于从上一个/
到结束的所有内容。
也许也很有趣:([^\/\?]*)(\?.*)?$
为您提供最后/
和第一?
答案 5 :(得分:1)
如果可以的话,对PCRE说不,: - )。
echo basename('http://example.com/sales/view/id/705');
答案 6 :(得分:1)
最简单的:
$ok=preg_match('#\d+$#',$url,$m);
if($ok)
echo $m[0],"\n";
聪明:
$ok=preg_match('#/(\d+)$#',$url,$m);
if($ok)
echo $m[1],"\n";
灵活:(因为它还允许使用除数字之外的单词)
$ok=preg_match('#/(\w+)$#',$url,$m);
if($ok)
echo $m[1],"\n";
更灵活:(因为它现在允许所有不匹配的东西)
$ok=preg_match('#/(.*?)$#',$url,$m);
if($ok)
echo $m[1],"\n";
答案 7 :(得分:1)
preg_match('@/([1-9]\d*)/?(?:$|\?)@', $url, $matches);//$matches[1] contains your id