正则expression式收集最后/
我是新来的正则expression式,并想知道如何在最后一个之后收集所有东西。
我正在提取Google的GData使用的ID。
我的例子string是
 http://spreadsheets.google.com/feeds/spreadsheets/p1f3JYcCu_cb0i0JYuCu123 
  ID为: p1f3JYcCu_cb0i0JYuCu123 
哦,我正在使用PHP。
这至less匹配(不是斜线)和string结尾之一:
 [^/]+$ 
笔记:
- 没有parens,因为它不需要任何组 – 结果进入组0(匹配本身)。
-  使用+(而不是*),以便如果最后一个字符是斜线,则无法匹配(而不是匹配空string)。
 但是, 很可能更快更简单的解决scheme就是使用您的语言内置的string列表处理function – 即ListLast( Text , '/' )或等效函数。 
对于PHP,最接近的函数是strrchr ,它的工作原理是这样的:
 strrchr( Text , '/' ) 
这包括结果中的斜杠 – 根据Teddy的评论,您可以使用substr删除斜线:
 substr( strrchr( Text, '/' ), 1 ); 
通常:
 /([^/]*)$ 
你想要的数据将是第一组的匹配。
  编辑由于你使用PHP,你也可以使用strrchr来返回从string最后一次出现到结束的所有内容。 或者你可以使用strrpos和substr的组合,首先find最后一次发生的位置,然后从该位置得到子string直到结束。 或explode和array_pop ,分割string在/和只是最后一部分。 
您也可以使用basename函数获取“文件名”或最后一部分。
 <?php $url = 'http://spreadsheets.google.com/feeds/spreadsheets/p1f3JYcCu_cb0i0JYuCu123'; echo basename($url); // "p1f3JYcCu_cb0i0JYuCu123" 
 在我的盒子上,我可以传递完整的URL。 这可能需要从前面http:/ 。 
基本名称和dirname非常适合移动看起来像unix文件path的任何内容。
 /^.*\/(.*)$/ 
  ^ =行的开始 
  .*\/ =贪婪匹配到最后一行到/从行的开始 
  (.*) =最后一次出现/ 
你也可以正常的string拆分
 $str = "http://spreadsheets.google.com/feeds/spreadsheets/p1f3JYcCu_cb0i0JYuCu123"; $s = explode("/",$str); print end($s); 
 这种模式不会捕获$0的最后一个斜杠,如果最后一个斜杠后没有字符,它将不会匹配任何内容。 
 /(?<=\/)([^\/]+)$/ 
编辑:但它需要向后看,不支持ECMAScript(Javascript,Actionscript),Ruby或一些其他口味 。 如果您正在使用其中一种口味,则可以使用:
 /\/([^\/]+)$/ 
 但它会捕获$0的最后一个斜杠。 
不是一个PHP程序员,但strrpos似乎是一个更有前途的开始。 find最右边的“/”,过去的一切都是你正在寻找的。 没有使用正则expression式。
查找string中最后一个字符的位置
基于@ Mark Rushakoff的回答,为不同情况提供了最佳解决scheme:
 <?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 ?> 
- 正则expression式收集最后/
- 如何从PHP的完整path获取文件名?