You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改preg_match_all正则以匹配含分号的fref=fr_tab链接?

解决方案

修改后的正则表达式如下:

if(preg_match_all('!href="([^"]*fref=fr_tab[^"]*)"!',$contents,$aMatch))

原因说明

原正则中的[^"]+是贪婪匹配至少一个非引号字符,且仅捕获到fref=fr_tab为止的内容。如果fref=fr_tab用分号作为参数分隔符(比如xxx;fref=fr_tab),或是处于链接中间/末尾位置,原正则的匹配逻辑会导致捕获不完整或无法匹配。

修改后的[^"]*表示匹配零个或多个非引号字符,前后都加上这个规则后,能完整捕获所有包含fref=fr_tab的href属性值——无论参数分隔符是?、&还是;,也不管fref=fr_tab在链接中的位置。

完整测试代码

$contents = $Curl->fetch_url($link);

if(preg_match_all('!href="([^"]*fref=fr_tab[^"]*)"!',$contents,$aMatch))
{   
    print_r($aMatch);
    exit;
}
else
{
    // 处理匹配失败的逻辑
}

内容的提问来源于stack exchange,提问作者Henning

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 19:20:11