2014-01-08 56 views
1

我需要从亚马逊网址中提取ASIN号码(10个字符的字母数字SKU)。该网址总是在这些格式:如何使用preg_match()从URL中提取数据?

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()有关吗?如果不是,解决这个问题的最好方法是什么?

UPDATE:

我已经在正则表达式阅读起来,并能修改答案时的工作ASIN是不是在URL字符串(而事实上并非如此)的末尾:

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

我也做到了,所以在比赛前必须有一个正斜杠。

+1

可以用'preg_match()'做。现在拿一些文章,只是学习如何做到这一点。 – zerkms

+1

是的,这是可能的,应该不会那么困难,因为您只搜索一个不同的组。但是你仍然必须自己研究这一点 - 当你为一次具体的尝试而斗争时,随时再问一次 – kero

+1

正如@zerkms指出的那样,这是可能的。预计你至少会在寻求帮助之前进行尝试。 –

回答

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这样你就可以自己做下一次:)

+2

荣誉解释你的解决方案,而不是只是说'做这个'。 – Rottingham

1

除了尼尔斯的答案:

​​

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