如何使用preg_match()从URL中提取数据?

时间:2014-01-08 00:06:04

标签: php regex preg-match amazon-product-api

我需要从Amazon URL中提取ASIN号码(10个字符的字母数字SKU)。网址始终采用以下格式:

http://www.amazon.com/gp/product/ASIN
http://www.amazon.com/gp/product/[text]/ASIN
http://www.amazon.com/o/ASIN
http://www.amazon.com/dp/ASIN
http://www.amazon.com/[text]/dp/ASIN
http://www.amazon.com/[text]/dp/[text]/ASIN

在URL中的ASIN编号之后通常有更多目录和变量。这是一个完整的URL作为示例:

http://www.amazon.com/Google-Nexus-Tablet-7-Inch-Black/dp/B00DVFLJDS/ref=sr_1_1?ie=UTF8&qid=1387937682&sr=8-1&keywords=nexus+7

我认为使用preg_match()可能会这样做,但我对非常是新的,并且没有表达表达式的线索。

这可能与preg_match()有关吗?如果没有,解决这个问题的最佳方法是什么?

更新

我一直在阅读正则表达式,当ASIN不在URL字符串的末尾时(很少这样),我能够修改工作的答案:

#\/([A-Za-z0-9]{10})#

我也是这样做的,所以在比赛前必须有正斜杠。

2 个答案:

答案 0 :(得分:2)

preg_match('#([A-Za-z0-9]{10})$#', $url, $matches);

简而言之:[A-Za-z0-9]使用任何字母数字字符,ucase和lcase两者都允许,{10}要求它完全10次,$要求它在字符串的末尾。括号()定义了要在第3 $matches个输出变量中返回的部分。最后,它被2 #包围为正则表达式分隔符。

现在转到read every article in the left sidebar of this page,以便下次可以自己动手:)

答案 1 :(得分:1)

除了尼尔斯的回答:

preg_match('#.*/([A-Za-z0-9]{10})/?$#', $url, $matches);

如果[text]是一个包含10个字符的字母数字。