我正在尝试preg_match()
从Amazon URL中提取10个字符的ASIN号码.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
注意:我遇到的问题源于在ASIN之后URL的末尾可能有也可能没有斜杠和变量.
在前一个问题中我收到的帮助,我想出了这个:
\/([A-Za-z0-9]{10})
我认为这是有效的,直到我在这个URL上尝试了它:
http://www.amazon.com/PlayStation-2-Console-Slim-Black/dp/B000TLU67W/ref=sr_1_4?ie=UTF8&qid=1389314719&sr=8-4&keywords=playstation+1
那个输出preg_match()
是:
Array ( [0] => /PlayStatio [1] => PlayStatio )
那么我尝试在正则表达式的末尾添加一个斜杠,如下所示:
\/([A-Za-z0-9]{10})\/
这解决了问题,为上面的URL提供了以下输出:
Array ( [0] => /B000TLU67W/ [1] => B000TLU67W )
但是,URL的末尾不会总是有斜杠.例如,如果对此进行了修改,则上述URL在Amazon上运行正常:
http://www.amazon.com/PlayStation-2-Console-Slim-Black/dp/B000TLU67W
我修改的正则表达式不适用于此URL,因为最后没有斜杠.
我想可能有一个OR条件,看看比赛后是否有斜线,或者之后没有任何东西,可能会有效,但我不知道该怎么做..
有没有办法让正则表达式与上述两个URL一起使用?
你可以使用这个正则表达式:
'#/([A-Z0-9]{10})(?=$|[/?#])#i'
即10位字母数字后跟斜线或?
OR或输入结束.