如何在PHP中显示找到的preg_match函数匹配?

时间:2011-01-11 04:48:10

标签: php

我使用以下内容检查file.php上是否存在链接:

$fopen = fopen('file.php', 'r');

$fread = fread($fopen, filesize('file.php'));

$pattern = "/^<a href=/i";

if (preg_match($pattern, $fread)) {
    echo 'Match Found';
} else {
    echo 'Match Not Found';
}

如果我echo preg_match($pattern, $fread)我得到一个布尔值,而不是找到的匹配。我尝试了php.net手册上的内容并做了这个:

preg_match($pattern, $fread, $matches);

然后当我回复$ match时,我收到了“Array”消息。所以我尝试了一个foreach循环,当没有显示任何内容时,我尝试了$ matches [0]并且没有输出任何内容。

那么如何展示找到的匹配?

修改

以下是file.php的唯一内容:

<a href="">Hello</a>

<a href="http://google.com">Hello</a>

<a href="/index.html">Hello</a>

2 个答案:

答案 0 :(得分:1)

要获得您想要实际显示的链接,您需要在正则表达式中包含匹配组:(注意我还添加了m修饰符来处理多行)

$pattern = "/^<a href=(.*?)>/im";

然后,如果您只是想要查看匹配结果数组的内容以进行调试,可以使用print_r

if (preg_match_all($pattern, $fread, $matches)) {
    echo 'Match Found';
    print_r($matches);
} else {
    echo 'Match Not Found';
}

答案 1 :(得分:1)

更好的方法是使用DOMDocument来解析HTML文档

$dom = new DomDocument;
$dom->loadHTMLFile('file.php');
$nodes = $dom->getElementsByTagName('a');
foreach ($nodes as $node)
{
  echo simplexml_import_dom($node)->asXML(), '<br/>';
}