适用于Amazon App Store URL的Regex

时间:2014-06-23 00:33:55

标签: ruby regex

以下是亚马逊网址的几个示例:

www.amazon.com/Alawar-Entertainment-Inc-Oddly-Enough/dp/B00KRB4PFS/
www.amazon.com/dp/B00KRB4PFS/
http://www.amazon.com/Forest-Legends-The-Call-Love/dp/B00K7797FA/ref=pd_sim_mas_3?ie=UTF8&refRID=17K5ZT2ZAZM8WYAQ7NEN

我希望编写正则表达式,从ruby中的每个网址中提取产品ID。不知道写这个的最好方法是什么?

现在我正在考虑使用的正则表达式为\/[A-Z,0-9]{10}\/

3 个答案:

答案 0 :(得分:1)

Ruby支持\K。因此,请使用\K忽略匹配的字符串

dp\/\K[^\/]*

DEMO

说明:

  • dp字面匹配字符dp
  • \/字面匹配字符/
  • \K任何先前匹配的字符都将被丢弃。
  • [^\/]*匹配文字/零次或多次。

答案 1 :(得分:0)

你不想在你的角色类中使用逗号。 你也可以添加一些前瞻/后方。

%r< (?<=dp\/) ([A-Z0-9]{10}) (?=\/) >x

答案 2 :(得分:0)

在不区分大小写的模式下使用它(因为ASIN可以是小写的):

(?<=dp/)[A-Z0-9]+

请参阅demo

选项2 \K 至&#34; Keep Out&#34;到目前为止匹配的内容:

dp/\K[A-Z0-9]+

在Ruby中,你需要转义斜杠:

if subject =~ /dp\/\K[A-Z0-9]+/i
    match = $&

如何运作

  • 后方(?<=dp/)检查我们前面是dp/ ...或
  • dp/\K匹配dp/,然后\K告诉引擎删除与要返回的匹配项目匹配的内容。
  • [A-Z0-9]+匹配任意数量的字母或数字

<强>参考