怎么写一个匹配的正则表达式只有在斜杠后匹配或者在匹配后什么都没有?

 mobiledu2502887531 发布于 2023-02-04 16:18

我正在尝试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一起使用?

1 个回答
  • 你可以使用这个正则表达式:

    '#/([A-Z0-9]{10})(?=$|[/?#])#i'
    

    即10位字母数字后跟斜线或?OR或输入结束.

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

    2023-02-04 16:20 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有