繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM