解决如果preg_match_all没有输出



我目前正在编写一个脚本。包括以下代码:

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

这只适用于部分链接fref=fr-tab+和&?,对吗?

当我检查链接,它包含fref=fr-tab,但没有&?,但分号。我费了很大的劲才让剧本成功。遗憾的是,到目前为止我还没有成功。

我怎么换乘?

尝试打印包含部分代码的数组:

$contents = $Curl->fetch_url($link);
if(preg_match_all('!href="([^"]+fref=fr_tab)"!',$contents,$aMatch))
{   
print_r($aMatch);
exit;
}
else

你的模式匹配fref=fr_tab,然后是",所以如果url较长,它将不匹配。

例如,您可以在匹配之后匹配"以外的可选字符,并使用词边界来防止部分词匹配。

bhref="([^"]+bfref=fr_tabb[^"]*)"

查看regex101中的匹配项。

你可以使模式更具体,也匹配;但如果你这样做,我建议使用parse_url代替PHP_URL_QUERY

bhref="([^"]*[?&;]fref=fr_tab(?:[&;][^"]*)?)"

查看另一个正则表达式演示。

注意在问题中,你也用连字符指代fref=fr-tab,但模式有一个下划线。

最新更新