如何像正则一样验证 HTML 并提取出捕获内容?
1. 比如,描述老虎林论坛首页的 HTML 结构(我也没想好语法,随便借用一些正则语法吧):
^ <!-- 匹配开头。暂时忽略 html、head 之类的标签 -->
<body style=any> <!-- 样式任意 -->
<header any*> <any** any*/> </header> <!-- 任意个属性、后代节点(属性任意) -->
<div class="container">
<any** any*> <!-- 忽略中间若干层节点。类似 xpath 中的 // -->
(?<帖子列表> <!-- 类似 js 正则中的命名捕获组 -->
<ul class="topic-ul"> <!-- 帖子列表 -->
<li>
(?<用户信息>
<div class="topic-anchor">
<a href=text>
<img class="avatar" src=(?<头像URL> text ) />
</a>
<a href=(?<链接> text )> (?<名称> text ) </a>
</div>)
(?<帖子信息>
<div class="topic-title">
<a class="user-title" href=(?<链接> text )>
(?<标题> text )
</a>
<div class="topic-meta">
(?<点击数> text ) "点击 / "
(?<发布时间> text ) "发布 / "
(?<最新回复时间> text ) "回复"
</div>
</div>
<div class="topic-reply-count">
<a href=text> (?<回复数> text ) </a>
</div>
(?<板块信息>
<div class="topic-forum-name">
<a class="topic-title" href=(?<链接> text) >
(?<名称> text )
</a>
</div>))
</li> + <!-- 至少一个帖子 -->
</ul>)
</any**>
</div>
<any** any*/> <!-- 不关心后续节点 -->
</body>
$ <!-- 匹配结尾 -->
捕获结果:
[
{
"用户信息": {
"头像URL": "https://file.hu60.cn/avatar/19011.jpg?r=1652530427",
"链接": "https://hu60.cn/q.php/user.info.19011.html",
"名称": "花祭"
},
"帖子信息": {
"链接": "https://hu60.cn/q.php/bbs.topic.105334.html",
"标题": "我这5g这么慢",
"点击数": "160",
"发布时间": "08-31 08:15",
"最新回复时间": "11分钟前",
"回复数": "12"
},
"板块信息": {
"链接": "https://hu60.cn/q.php/bbs.forum.88.html",
"名称": "超级灌水"
}
},
{
"用户信息": {
"头像URL": "https://file.hu60.cn/avatar/24826.jpg?r=1692886310",
"链接": "https://hu60.cn/q.php/user.info.24826.html",
"名称": "咯叽"
},
"帖子信息": {
"链接": "https://hu60.cn/q.php/bbs.topic.105341.html",
"标题": "qq浏览器有何神奇之处?",
"点击数": "10",
"发布时间": "1小时前",
"最新回复时间": "45分钟前",
"回复数": "4"
},
"板块信息": {
"链接": "https://hu60.cn/q.php/bbs.forum.88.html",
"名称": "超级灌水"
}
},
"……省略剩余 18 个帖子信息……"
]
2. 如何自动抽取总结共有结构呢?
比如,有些帖子有 [公开] 标签,能不能自动识别加上呢?
<div class="topic-meta">
(?<点击数> text ) "点击 / "
(?<发布时间> text ) "发布 / "
(?<最新回复时间> text ) "回复"
<div class="topic-status">"公开"</div> ? <!-- 自动备注:出现了 4 / 20 次 -->
</div>


