php 如果preg_match_all无输出则求解

ffscu2ro  于 2023-01-01  发布在  PHP
关注(0)|答案(1)|浏览(121)

我目前正在编写一个脚本。包含以下代码:
第一个月
这只适用于链接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
arknldoa

arknldoa1#

您的模式匹配fref=fr_tab,后面紧跟",因此如果url较长,则不匹配。
例如,您可以在匹配后匹配"以外的可选字符,并使用单词边界来防止部分单词匹配。

\bhref="([^"]+\bfref=fr_tab\b[^"]*)"

regex101上查看匹配。
您可以使模式更具体,也匹配;,但如果您采用这种方法,我建议使用parse_url代替PHP_URL_QUERY

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

参见另一个regex demo

请注意在问题中,您还使用连字符引用fref=fr-tab,但该模式使用下划线。

相关问题