我的问题是,我在std::string
内部有一个网站的HTML主体,现在我要将所有内部的URL提取到std::vector< std::string >
中。我知道如何使用正则表达式检查字符串是否是一个URL,但我不知道如何将所有的URL提取到std::vector
。
有人能指出我正确的方向吗?
要从HTML文档中有意义地提取数据,您需要解析HTML。 HTML specification描述了HTML的语法(请注意,还有旧版本的HTML,因此请务必根据HTML文档的编写版本进行解析)。该规范有一个非常有用的标题为Parsing HTML documents的部分,它与编写解析器非常相关。
解析HTML文档的结果应该是Document Object Model树。您可以遍历此树以查找您要查找的URL。
所以使用一个好的标记语言阅读器,如Boost Property Tree,总是比手动处理更合适。
但假设你说你已经开发了一个用于解析html的防弹正则表达式。因为我们不希望嫉妒来自其他受害者,他们试图通过正则表达式跨越标记语言处理的危险雷区;我们只需要调用你的正则表达式:regex re
,我们会说它的第一个捕获是你要存储在这个vector
中的URL。
有了这样一个传奇的正则表达式,你唯一需要的是regex_token_iterator
。鉴于对流程的输入是,const sting text
你可以简单地这样做:
vector<string> foo { sregex_token_iterator(cbegin(text), cend(text), re, 1), sregex_token_iterator() }