【问题标题】:How to extract data from URLs using preg_match()?如何使用 preg_match() 从 URL 中提取数据?
【发布时间】:2014-01-08 00:06:03
【问题描述】:

我需要从亚马逊 URL 中提取 ASIN 编号(10 个字符的字母数字 SKU)。 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() 有关吗?如果不是,解决这个问题的最佳方法是什么?

更新:

我一直在阅读正则表达式,并且能够在 ASIN 不在 URL 字符串的最末尾(这种情况很少出现)时修改答案:

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

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

【问题讨论】:

  • 可以使用preg_match()。现在看一些文章,然后学习如何做到这一点。
  • 是的,这是可能的,而且不应该那么困难,因为您只搜索一个不同的组。但是您仍然需要自己研究 - 当您遇到具体尝试时,请随时再次询问
  • 正如@zerkms 指出的那样,这是可能的。在寻求帮助之前,您至少应该尝试一下。
  • 谢谢,我会继续努力弄清楚,一旦我有一个半合理的尝试,我会更新我的问题。

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


【解决方案1】:
preg_match('#([A-Za-z0-9]{10})$#', $url, $matches);

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

现在去read every article in the left sidebar of this page,这样你下次可以自己做:)

【讨论】:

  • 感谢您解释您的解决方案的作用,而不仅仅是说“这样做”。
【解决方案2】:

除了尼尔斯的回答:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-09
    • 1970-01-01
    • 1970-01-01
    • 2012-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多