我刚开始学习正则表达式,想知道如何编写一个表达式来收集最后一个 /
后面的所有内容。
我正在提取 Google 的 GData 中使用的 ID。
我的示例字符串为:
http://spreadsheets.google.com/feeds/spreadsheets/p1f3JYcCu_cb0i0JYuCu123
标识符是:p1f3JYcCu_cb0i0JYuCu123
哦,我在使用 PHP。
这个模式至少匹配一个字符(不能是斜杠),并且紧随字符串结尾:
[^/]+$
注意:
+
(而不是*
),因此如果最后一个字符是斜杠,则无法匹配(而不是匹配空字符串)。
但是,最可能更快且更简单的解决方案是使用您所使用的编程语言内置的字符串列表处理功能,例如 ListLast( Text , '/' )
或等效函数。
对于PHP,最接近的功能是strrchr,其工作原理如下:
strrchr( Text , '/' )
这将包括结果中的斜杠 - 根据Teddy在下面的评论中所说,您可以使用substr删除斜杠:
substr( strrchr( Text, '/' ), 1 );
/([^\/]*$/
- rampion/…/
),其他语言有类来从字符串构建正则表达式(例如Java),而其他语言则只使用字符串(例如PHP)。但总的来说,我的正则表达式是正确的。 - Gumbo/^.*\/(.*)$/
^
表示行首
.*\/
表示从行首到最后一个/之间的最长匹配字符串
(.*)
表示/后面的所有内容作为一个组
你也可以使用普通字符串分割
$str = "http://spreadsheets.google.com/feeds/spreadsheets/p1f3JYcCu_cb0i0JYuCu123";
$s = explode("/",$str);
print end($s);
$0
中的最后一个斜杠,并且如果最后一个斜杠后面没有字符,则不会匹配任何内容。/(?<=\/)([^\/]+)$/
/\/([^\/]+)$/
$0
中的最后一个斜杠。虽然我不是PHP程序员,但strrpos似乎是一个更有前途的起点。找到最右边的'/',并且它后面的所有内容就是你要找的。没有使用正则表达式。
在字符串中查找字符的最后一次出现位置
根据@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
?>
substr(strrchr(Text, '/'), 1);
- Teddy Zetterlund[^/]+$
实际上是错误的。/
是一个分隔符,你应该转义它:[^\/]+$
。 - Thielicious