我正在尝试使用正则表达式抓取 HTML 页面的标题。这是我正在尝试的:
\<title\>\A\Z\</title\>
有什么建议么?
<title>(.*?)</title>
周围的括号.*?
让您可以引用捕获组。您的正则表达式库可能会返回捕获组中匹配的内容。索引为 0 的组是整个匹配项。因此,您可能应该选择组索引 1,这是它遇到的第一个起始括号(这里只有一组括号)。
在某些库中,您需要:
.*?<title>(.*?)</title>.*
因为有些需要字符串的完全匹配。
请注意,这并非万无一失。网页可以使用以下页面破坏您的正则表达式:
<html>
<script>
// <title>HAHA YOU GOT THE WRONG TITLE</title>
</script>
<title>The Actual title</title>
</head><body></body>
</html>
您可以通过在匹配标题之前使您的正则表达式更加复杂来避免这种可能性。然而,这并不真正奏效。因为假标题可能在 HTML 评论<!-- <title></title> -->
或/* javascript */
评论中。
因此,最好使用实际的 HTML 解析器。你可以搜索谷歌找到其中的许多。
如果您使用的是 Ruby,则可以使用 nokogiri gem - http://nokogiri.org/。
对于 Java - http://htmlparser.sourceforge.net/。
对于 python - http://docs.python.org/library/htmlparser.html。