我在正则表达式方面是新手,不知道如何表达一个在上一个 /之后收集所有内容的表达式。
/
我正在提取谷歌 GData 使用的 ID。
我的示例字符串是
http://spreadsheets.google.com/feeds/spreadsheets/p1f3JYcCu_cb0i0JYuCu123
证件在哪里: p1f3JYcCu_cb0i0JYuCu123
p1f3JYcCu_cb0i0JYuCu123
我用的是 PHP。
一般来说:
/([^/]*)$
您需要的数据将与第一组匹配。
编辑 由于您使用的是 PHP,因此还可以使用 strrchr,它返回字符串中从最后一次出现到结束的所有内容。或者您可以使用 strrpos和 substr的组合,首先找到最后出现的位置,然后从该位置获取子字符串直到结束。或者 explode和 strrpos0,在 /分割字符串,得到最后一部分。
strrchr
strrpos
substr
explode
这个模式不会捕获 $0中的最后一个斜杠,如果最后一个斜杠后面没有字符,那么它就不会匹配任何内容。
$0
/(?<=\/)([^\/]+)$/
编辑: 但它需要后退,不支持 ECMAScript (Javascript,Actionscript) ,Ruby 或 还有一些其他的口味。如果你正在使用其中一种口味,你可以使用:
/\/([^\/]+)$/
但是它捕获了 $0中的最后一个斜线。
/^.*\/(.*)$/
^ = 行的开始
^
从行的开始到最后一次出现的贪婪匹配
(.*) = 上次发生/之后的所有事情的组
(.*)
这至少匹配字符串末尾的一个(任何不是斜杠的东西) :
[^/]+$
备注:
+
*
但是,更快更简单的解决方案是使用您的语言的内置字符串列表处理功能-即 ListLast( Text , '/' )或等效的函数。
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:/。
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 ?>