如何使用正则表达式在最后一次斜杠后得到数字?

时间:2014-03-11 23:26:14

标签: regex

对于这样的网址:

http://www.walmart.com/ip/0982724/some-text-here/234397280?foo=bar

如何在最后一个斜线后获得可变长度数?

我尝试使用这个正则表达式:

\/([0-9]+)

但它获得了第一个数字,而不是最后一个数字。

演示:http://regex101.com/r/nU3wG2

我尝试在最后添加一个美元符号,但之后没有匹配。

3 个答案:

答案 0 :(得分:3)

您可以使用这个基于前瞻性的正则表达式:

\/([0-9]+)(?=[^\/]*$)

在线演示:http://regex101.com/r/eL3mK3

这意味着找到一个后跟0或更多非斜杠字符串的数字,直到结束。

答案 1 :(得分:1)

如果您可以使用捕获组的内容,则可以在没有很少实现的超前功能的情况下执行此操作。

\/([0-9]+)[^\/]*$

在线演示: http://regex101.com/r/yG2zN1

这意味着“找到斜杠后跟任意正数位数后跟任何非斜杠字符后跟行尾”。当正则表达式找到longest leftmost匹配时,所有这些数字都会被捕获到一个组中。

答案 2 :(得分:0)

$aa = "http://www.walmart.com/ip/0982724/some-text-here/234397280?foo=bar";

$aa =~ /\/(\d+)\D+$/;

print $1, "\n";

此打印234397280 \ D是任何非数字\ d是任何数字,它与'[0-9]

相同