繁体   English   中英

在PHP的字符串中查找特定URL的正则表达式

[英]Regular expression to find specific URLs within a string in PHP

我正在寻找大文本字符串中的特定URL,这些URL的格式如下:

https://name.myurl.com/#/shop/ rmpa8cmnfg3eerpus3ap9jwekz6k77pnj2pg50ua / login

*粗体部分是随机的。

目前,我可以使用以下方法推断所有 URL:

preg_match_all('!https?://\S+!', $string, $matches); 

然后,我需要遍历并使用以下命令拉出所有包含特定字符串的URL:

$arr = $matches[0];

foreach ($arr as $haystack) {

    if (strlen(strstr($haystack,"shop"))>0) {

      echo $haystack;

    }
}

我正在尝试使代码更高效,并且似乎无法确定可以找到所有匹配的URL的正则表达式:

https://name.myurl.com/#/shop/rmpa8cmnfg3eerpus3ap9jwekz6k77pnj2pg50ua/login

如果可以的话,可以减少第二次字符串查找的需要。

任何帮助将非常感激。

谢谢

关键是您需要问自己,您需要匹配的字符串中有什么特别的。 如果URL包含感兴趣的子路径,则该子部分是第二部分,或者是末尾部分,或者它由字母和数字组成,等等。

一旦知道要匹配的内容,就可以开始使用正则表达式。

似乎您需要将URL与/shop/子路径进行匹配。 然后,您所需要做的就是将该子模式包括在模式中。 由于它是字符的文字序列,因此没有什么困难:

'~https?://\S+/shop/\S+~'
              ^^^^^^

正则表达式演示

如果您要做的只是验证/shop/部分是否为URL的一部分,请使用:

https?:\/\/\S*\/shop\/\S*

它基本上是您的正则表达式,另外还要求在协议部分(http(s)://)之后使用/shop/ ,并允许在shop-part之前和之后使用非空格字符。

问候

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM