gpt4 book ai didi

php - 如何编写一个仅在匹配后有斜杠或什么都没有时才匹配的正则表达式?

转载 作者:可可西里 更新时间:2023-11-01 00:02:40 25 4
gpt4 key购买 nike

我正在尝试使用 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 位字母数字后跟斜杠或 ? 或只是输入的结尾。

在线演示:http://regex101.com/r/aE0jU8

关于php - 如何编写一个仅在匹配后有斜杠或什么都没有时才匹配的正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21049068/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com