你在这里问了很多问题。在你得到一个好的答案之前,你需要清楚你想要从你的输入中“解析”出什么。例如,您可以查找任何“<”字符,并将它们转换为其他字符,这样它们就不会被任何 HTML 解析器解析。
或者,您可以搜索 < 和 > 的模式,然后是 </ > 模式。(对不起,我不得不把它放在这里,这样 HTML 解析器 HERE 就不会吃掉它)。然后,您还需要查找“< 单元素标签 />”。
您实际上可以查找有效/已知的 HTML 标记并将其删除。
那么,问题就变成了,哪种方法适合您的解决方案?知道如果您制作一个简单的解析器,您实际上可能会撕掉包含大于和小于符号的有效文本。
所以,到目前为止,这是我给你的答案。
如果您只想删除任何 HTML 风格的文本,我建议您使用正则表达式引擎 (PCRE),并使用它来解析您的输入,并删除所有匹配的字符串。这可能是一个简单的解决方案,但它确实需要您获取并构建 PCRE,并且您需要为您的项目了解 GPL 问题。解析可能真的很容易实现,并且运行速度很快。
第二种选择是通过遍历缓冲区,寻找打开的 HTML 字符 (<),然后解析直到遇到第一个空白,然后开始遍历,寻找关闭的 HTML 字符 (>),然后再次开始遍历,根据您刚刚解析的内容寻找匹配的 CLOSING 标记。(比如说,它是一个 DIV 标签,你要查找 /DIV。)
我有在 STL HTML 解析器中执行此操作的代码,但也有很多问题需要考虑走这条路。例如,您需要处理实体代码、IMG、P 和 BR 等单元素标签,仅举几例。
如果您想查看一些非常棒的 C 代码,请查看 ClamAV 项目。他们有一个 HTML 解析器,可以去除页面中的所有标签,只剩下剩下的文本。(除其他外它确实..)。在文件 libclamav\htmlnorm.c 中查看有关“缓冲行走”和解析的一个很好的示例。这不是世界上最快的东西,但它确实有效......最新的 Clam 甚至可能有很多东西与 HTML 解析器相关联,实际上可能很难理解。如果是这样,请返回并查看早期版本,例如 .88.4 左右。请注意那些旧代码库中的错误,有一些好的。:)
希望这可以帮助。