正则表达式获取页面标题

时间:2012-11-22 10:02:14

标签: php regex

这个问题有很多答案,但不是一个完整的问题:

使用一个正则表达式,如何从<title>Page title</title>中提取页面标题?

还有其他几种情况如何输入标题标签,例如:

<TITLE>Page title</TITLE>

<title>
 Page title</title>
<title>
 Page title
</title>

<title lang="en-US">Page title</title>

......或上述任意组合。

它可以在自己的行上或在其他标签之间:

<head>
  <title>Page title</title>
</head>

<head><title>Page title</title></head>

提前感谢您的帮助。

UDPATE:因此,正则表达式方法可能不是最佳解决方案。哪个基于PHP的HTML解析器可以处理HTML格式良好(或不太好)的所有场景?

更新2:sp00m的正则表达式( https://stackoverflow.com/a/13510307/1844607)似乎在所有情况下都有效。如果需要,我会回到这里。

3 个答案:

答案 0 :(得分:7)

Use a HTML parser instead。但在以下情况下:

<title[^>]*>(.*?)</title>

Demo

答案 1 :(得分:2)

使用DOMDocument类:

$doc = new DOMDocument();
$doc->loadHTML($html);
$titles = $doc->getElementsByTagName("title");
echo $titles->item[0]->nodeValue;

答案 2 :(得分:0)

使用此正则表达式:

<title>[\s\S]*?</title>