我目前正在编写一个脚本。包括以下代码:
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
,但模式有一个下划线。