最直接方案是用std::regex匹配并替换所有结构,但需注意C++11以上支持且MSVC早期版本存在兼容性问题;对HTML实体编码需先解码再清理,顺序为&→&、。> ↩

用正则表达式移除HTML标签最直接
标准C++没有内置HTML解析器,所以不能靠std::string自带方法安全剥离标签。最常用、也最轻量的方案是用std::regex匹配并替换掉所有<...>结构。但要注意:C++11起才支持std::regex,且MSVC在早期版本(如VS2013)中正则实现不完整,std::regex_replace可能崩溃或漏匹配。
推荐写法:
std::string strip_html(const std::string& s) {
static const std::regex re("]*>");
return std::regex_replace(s, re, "");
}
这个正则 如果源字符串里HTML是被实体编码过的,比如 稳妥做法是分两步: 注意顺序:必须先解 在高频调用场景(比如每秒处理上万条日志), 替代方案是手动扫描: 这段代码不依赖正则,无额外分配(除了结果字符串),兼容所有C++标准。但它无法识别]*>能覆盖单标签(如、),但不处理注释或CDATA。如果输入含嵌套或畸形HTML(比如helloworld中间缺),它仍能删掉所有尖括号片段——这反而是优势:你只要纯文本,不是要解析DOM。遇到转义字符(如
,上面的正则不会匹配——它只找字面的和>。这时候得先解码再清理,或者一步到位用更宽泛的模式。
→
,> → >,& → &std::regex_replace删标签&,否则会被错解成后又变成,引发二次误删。一个典型错误是只替换却忽略<,结果把<script>变成<script></script>,仍残留可执行代码片段。性能敏感时别用std::regex
std::regex构造和匹配开销明显。实测显示,对1KB字符串,std::regex_replace比手写状态机慢3–5倍。std::string strip_html_simple(const std::string& s) {
std::string out;
bool in_tag = false;
for (char c : s) {
if (c == '') in_tag = false;
else if (!in_tag) out += c;
}
return out;
}
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











