获得相同级别的标签?

时间:2012-03-24 17:30:59

标签: c++ regex visual-c++ boost-regex

Boost抛出异常。

An unhandled exception "0x000007fefd0aa88d" in the "svg.exe": Exception Microsoft C: boost :: exception_detail :: clone_impl <boost :: exception_detail :: error_info_injector <std::runtime_error>>

表示正则表达式

opentag = [<] [s] [p] [a] [n]
closetag = [<] [/] [s] [p] [a] [n] [>]
    /opentag+"(?>(?>(?!"+opentag+"|"+closetag+").) |(?R))*"+closetag/

如果传入的字符串(std :: string)大小超过140 kb。

我需要将标签放在同一级别。

std :: string = "<span id=1> </ span>
<span id=2> <span> </ span> </ span>
<span id=3> <span> <span> <span> </ span> </ span> </ span> </ span> "

三个字符串

0) <span id=1> </ span>
1) <span id=2> <span> </ span> </ span>
2) <span id=3> <span> <span> <span> </ span> </ span> </ span> </ span>

如何更改boost选项,正则表达式尝试处理任何大小的字符串并且不会抛出异常。 或者如何在没有正则表达式的情况下获得相同级别的标签?

1 个答案:

答案 0 :(得分:5)

您无法使用正则表达式解析HTML。对于普通的无上下文语法,我建议只使用解析器,但HTML的现实状态是你需要一个专用的HTML解析器库。