以下是亚马逊网址的几个示例:
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}\/
答案 0 :(得分:1)
Ruby支持\K
。因此,请使用\K
忽略匹配的字符串
dp\/\K[^\/]*
说明:
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]+
匹配任意数量的字母或数字<强>参考强>