[英]How to extract data from URLs using preg_match()?
我需要从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()
,但我对regex 很新,并且没有线索来表达表达式。
这可能与preg_match()
吗? 如果没有,解决这个问题的最佳方法是什么?
更新:
我一直在读正则表达式,当ASIN不在URL字符串的末尾时(很少这样),它能够修改工作的答案:
#\/([A-Za-z0-9]{10})#
我也是这样做的,所以在比赛前必须有一个正斜线。
preg_match('#([A-Za-z0-9]{10})$#', $url, $matches);
简而言之: [A-Za-z0-9]
任何字母数字字符,ucase和lcase都允许, {10}
要求它恰好10次,而$
要求它在字符串的末尾。 括号(
和)
定义要在第3个$matches
输出变量中返回的部分。 最后它被2 #
的正则表达式分隔符所包围。
现在去阅读本页左侧边栏中的每篇文章,以便下次自己做:)
除了Niels的回答:
preg_match('#.*/([A-Za-z0-9]{10})/?$#', $url, $matches);
如果[text]
是一个包含10个字符的字母数字。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.