PHP正则表达式解析我的可见链接

时间:2014-05-02 09:22:50

标签: php regex

我想在网站上查看我的链接,但我也想查看它是否可见。我写了这段代码:

    $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个结果:visiblenot found/invisible

1 个答案:

答案 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>