我想在网站上查看我的链接,但我也想查看它是否可见。我写了这段代码:
$content = file_get_contents('tmp/test.html');
$pattern = '/<a\shref="http:\/\/mywebsite.com(.*)">(.*)<\/a>/siU';
$matches = [];
if(preg_match($pattern, $content, $matches)) {
$link = $matches[0];
$displayPattern = '/display(.?):(.?)none/si';
if(preg_match($displayPattern, $link)) {
echo 'not visible';
} else {
echo 'visible';
}
} else {
echo 'not found the link';
}
它有效但不完美。如果链接是这样的:
<a class="sg" href="http://mywebsite.com">mywebsite.com</a>
第一种模式不起作用,但如果我将\s
更改为(.*)
,则会从第一个a
标记返回字符串。第二个问题是两种模式。有没有办法合并第一个与否定第二个?合并模式有2个结果:visible
或not found/invisible
。
答案 0 :(得分:0)
我会猜测。 如果您的代码(使用file_get_contents获取的代码)看起来像这样,那么您遇到了问题
<a class="sg" href="http://mywebsite.com">mywebsite.com</a>
.
.
.
<a href="http://mywebsite.com">mywebsite.com</a>
你的正则表达式将从第一个&lt; / a&gt;返回所有内容标记,因为点匹配一个新行(我想你需要它打开,但如果你不,它的标志,那么删除它)
因此
.*
会继续搜索所有内容,所以你需要让它变得贪婪 (当它贪婪时,一旦找到它想要的东西就会停止搜索),就像这个
.*?
你的正则表达式应该是这样的
<a.*?href="http:\/\/mywebsite.com(.*?)">(.*?)<\/a>