URL中某个值的Regex-屏幕抓取


Regex for a value in URL - Screen scraping

我尝试了很多不同的实例,但似乎都做不好,所以我希望其他人能帮助这个项目。

正在处理一个基于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);

这样你就可以把它保持在一条线上。