作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试使用 preg_match()
从亚马逊 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
注意:我遇到的问题源于这样一个事实,即 URL 末尾的 ASIN 之后可能有也可能没有斜杠和变量。
在 a previous question 的帮助下,我想到了这个:
\/([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 位字母数字后跟斜杠或 ?
或只是输入的结尾。
关于php - 如何编写一个仅在匹配后有斜杠或什么都没有时才匹配的正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21049068/
我是一名优秀的程序员,十分优秀!