我尝试了很多不同的实例,但似乎都做不好,所以我希望其他人能帮助这个项目。
正在处理一个基于PHP的scrape项目。
我想从以下网址获取"5094151":
http://www.test.com/item/11-x-17-1-1-2-Gold-Distressed-Picture-Frame-11101202-5094151
请记住,这个数字"5094151"代表一个项目编号,用于项目列表,因此每个URL都不同,并且数字的大小也可能不同。例如,这个数字的长度可以是4位,可以是7位,也可以是10位。
我正在寻找一个preg_match函数,它可以给我这个数字。
如有任何帮助,我们将不胜感激!
给定您当前的示例,此正则表达式应该可以找到id
。
.*-('d+)
演示:https://regex101.com/r/oD5eV8/1
.*
表示捕获每个/任何字符,直到最后一个-
。'd
是一个数字,+
是一个或多个数字,并且()
捕获该值。
在PHP、中的使用
$string = 'http://www.test.com/item/11-x-17-1-1-2-Gold-Distressed-Picture-Frame-11101202-5094151http://www.test.com/item/11-x-17-1-1-2-Gold-Distressed-Picture-Frame-11101202-5094151';
preg_match('~.*-('d+)~', $string, $id);
echo $id[1];
输出:
5094151
PHP示例中的~
是分隔符;它们区分正则表达式的起点和终点。
如果它是字符串的最后一部分,并且总是以-{number}
结尾,则不需要regex:
$num = strrchr($url, '-');
'd+$
'd+
匹配尽可能多的数字(最少一个($
匹配字符串的末尾
看到它在行动
preg_match('/'d+$/', $url, $item_number);
echo $item_number[0]; // => 5094151
如果没有regex,您也可以通过分解URL字符串来获得该id。
$string = 'http://www.test.com/item/11-x-17-1-1-2-Gold-Distressed-Picture-Frame-11101202-5094151';
$id = end(explode("-",$string));
$id = preg_replace('/.*-/', '', $url);
这样你就可以把它保持在一条线上。