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

Hel*_*his 53 php regex

我是正则表达式的新手,并想知道如何在最后一个之后收集所有内容/.

我正在提取Google的GData使用的ID.

我的示例字符串是

http://spreadsheets.google.com/feeds/spreadsheets/p1f3JYcCu_cb0i0JYuCu123
Run Code Online (Sandbox Code Playgroud)

身份证号码是: p1f3JYcCu_cb0i0JYuCu123

哦,我正在使用PHP.

Pet*_*ton 106

这匹配至少一个(任何不是斜杠)后跟字符串结尾:

[^/]+$
Run Code Online (Sandbox Code Playgroud)


笔记:

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


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

对于PHP,最接近的函数是strrchr,其工作方式如下:

strrchr( Text , '/' )
Run Code Online (Sandbox Code Playgroud)

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

substr( strrchr( Text, '/' ), 1 );
Run Code Online (Sandbox Code Playgroud)

  • +1使用非正则表达式解决方案.对URL进行子串化会更快,并且会避免导入正则表达式支持. (6认同)

Gum*_*mbo 18

通常:

/([^/]*)$
Run Code Online (Sandbox Code Playgroud)

您想要的数据将与第一组匹配.


编辑    因为您正在使用PHP,所以您也可以使用strrchr它返回从字符串中最后一次出现到结尾的所有内容.或者你可以使用的组合strrpossubstr,先找到最后一次出现的位置,然后从那个位置上的串到最后.或explodearray_pop,处裂开了串/并得到公正的最后一部分.

  • 您可能需要转义字符类中的斜杠,具体取决于您使用的语言.`/([^\/]*$ /` (3认同)

Jam*_*col 12

您还可以使用basename函数获取"文件名"或最后一部分.

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

echo basename($url); // "p1f3JYcCu_cb0i0JYuCu123"
Run Code Online (Sandbox Code Playgroud)

在我的盒子上,我可以传递完整的URL.您可能需要http:/从前面剥离.

Basename和dirname非常适合移动任何看起来像unix文件路径的东西.


ras*_*ani 8

/^.*\/(.*)$/
Run Code Online (Sandbox Code Playgroud)

^ =行的开始

.*\/ =贪婪匹配到行开始的最后一次出现

(.*) =在最后一次出现之后出现的一切事物