我希望在大量文本中找到特定的网址,网址采用以下格式:
https://name.myurl.com/#/shop/的 rmpa8cmnfg3eerpus3ap9jwekz6k77pnj2pg50ua /登录
*粗体部分是随机的。
目前,我可以使用以下内容推断所有网址:
preg_match_all('!https?://\S+!', $string, $matches);
然后我需要循环并使用以下方法提取包含特定字符串的所有URL:
$arr = $matches[0];
foreach ($arr as $haystack) {
if (strlen(strstr($haystack,"shop"))>0) {
echo $haystack;
}
}
我正在尝试使代码更有效,并且似乎无法找到可以找到所有匹配的匹配的正则表达式:
https://name.myurl.com/#/shop/rmpa8cmnfg3eerpus3ap9jwekz6k77pnj2pg50ua/login
如果可以,它将减轻进行第二次字符串查找的需要。
非常感谢任何帮助。
由于
答案 0 :(得分:1)
关键是你需要问自己在你需要匹配的字符串中有什么特别之处。如果URL包含感兴趣的子路径,如果子部分是第二个,或者从末尾开始的第二个,或者它包含字母和数字等。
一旦你知道匹配什么,就可以开始使用正则表达式了。
您似乎需要将网址与/shop/
子路径匹配。然后,您只需要将该子模式包含在模式中。因为它是一个字面的字符序列,所以没有什么困难:
'~https?://\S+/shop/\S+~'
^^^^^^
请参阅regex demo
答案 1 :(得分:1)
如果您要做的只是验证/shop/
部分是否是网址的一部分,请使用:
https?:\/\/\S*\/shop\/\S*
它基本上是你的正则表达式,在协议部分(http(s)://)之后增加了要求/shop/
,并允许在商店部分之前和之后使用非空格字符。
此致