正则表达式收集最后/之后的所有内容

我在正则表达式方面是新手,不知道如何表达一个在上一个 /之后收集所有内容的表达式。

我正在提取谷歌 GData 使用的 ID。

我的示例字符串是

http://spreadsheets.google.com/feeds/spreadsheets/p1f3JYcCu_cb0i0JYuCu123

证件在哪里: p1f3JYcCu_cb0i0JYuCu123

我用的是 PHP。

92591 次浏览

一般来说:

/([^/]*)$

您需要的数据将与第一组匹配。


编辑 由于您使用的是 PHP,因此还可以使用 strrchr,它返回字符串中从最后一次出现到结束的所有内容。或者您可以使用 strrpossubstr的组合,首先找到最后出现的位置,然后从该位置获取子字符串直到结束。或者 explodestrrpos0,在 /分割字符串,得到最后一部分。

这个模式不会捕获 $0中的最后一个斜杠,如果最后一个斜杠后面没有字符,那么它就不会匹配任何内容。

/(?<=\/)([^\/]+)$/

编辑: 但它需要后退,不支持 ECMAScript (Javascript,Actionscript) ,Ruby 或 还有一些其他的口味。如果你正在使用其中一种口味,你可以使用:

/\/([^\/]+)$/

但是它捕获了 $0中的最后一个斜线。

/^.*\/(.*)$/

^ = 行的开始

从行的开始到最后一次出现的贪婪匹配

(.*) = 上次发生/之后的所有事情的组

这至少匹配字符串末尾的一个(任何不是斜杠的东西) :

[^/]+$


备注:

  • 没有括号,因为它不需要任何组-结果进入组0(匹配本身)。
  • 使用 +(而不是 *) ,这样如果最后一个字符是斜杠,它就无法匹配(而不是匹配空字符串)。


但是,更快更简单的解决方案是使用您的语言的内置字符串列表处理功能-即 ListLast( Text , '/' )或等效的函数。

对于 PHP,最接近的函数是 ,其工作原理如下:

strrchr( Text , '/' )

这包括结果中的斜杠——根据 Teddy 下面的评论,你可以用 字幕删除斜杠:

substr( strrchr( Text, '/' ), 1 );

不是 PHP 程序员,但 Strrpos似乎是一个更有前途的起点。找到最右边的“/”,过去的一切都是你所寻找的。没有使用正则表达式。

查找字符串中字符最后一次出现的位置

您还可以使用 名字函数获得“ filename”或最后一部分。

<?php
$url = 'http://spreadsheets.google.com/feeds/spreadsheets/p1f3JYcCu_cb0i0JYuCu123';


echo basename($url); // "p1f3JYcCu_cb0i0JYuCu123"

在我的盒子上,我可以直接传递完整的 URL。你可能需要从前面剥掉 http:/

Basename 和 名字非常适合移动任何看起来像 unix 文件路径的内容。

你也可以普通的拆字

$str = "http://spreadsheets.google.com/feeds/spreadsheets/p1f3JYcCu_cb0i0JYuCu123";
$s = explode("/",$str);
print end($s);

根据@Mark Rushakoff的回答,针对不同情况的最佳解决方案:

<?php
$path = "http://spreadsheets.google.com/feeds/spreadsheets/p1f3JYcCu_cb0i0JYuCu123?var1&var2#hash";
$vars =strrchr($path, "?"); // ?asd=qwe&stuff#hash
var_dump(preg_replace('/'. preg_quote($vars, '/') . '$/', '', basename($path))); // test.png
?>
  1. 正则表达式收集最后/之后的所有内容
  2. 如何从 PHP 的完整路径获取文件名?