preg_match里面的preg_match

时间:2012-01-25 21:27:44

标签: php regex preg-match preg-match-all

我正在使用以下preg_match来获取网页的[title]标签。

// get <title>
$search = "/\<title\>(.*)\<\/title>/i";
preg_match($search, $url_contents, $result);
$title = $result[1];

现在我想搜索那个[title]标签,所以我写了这个:

// search for $keyword
$keyword_slash = "/". $keyword ."/";
preg_match_all($keyword_slash, $title, $result);
print_r($result); // just for testing

我添加了$ keyword_slash,因为它给了我一个错误。然而,这不起作用。它总是返回一个空数组,即使我知道$ keyword位于[title]内。

1 个答案:

答案 0 :(得分:3)

你的正则表达式首先preg_match似乎不正确。它应该是:

$search = "~<title>([^<]*)</title>~i";

但是我必须提醒你,使用像这样的正则表达式提取标题非常容易出错,你应该考虑使用DOM解析器来实现它。

更新:以下是针对网页标题建议的DOM解析:

$dom = new DOMDocument();
libxml_use_internal_errors(true);
$dom->loadHTML($content);
$xpath = new DOMXPath($dom);
$title = $xpath->query("//head/title")->item(0)->nodeValue;
printf("title=[%s]\n", $title);