我需要从字符串中获取值。我有这段HTML:
<input type="hidden" name="wtkn" value="56e45dbe_wNIT/DcufUPvZOL33jmkyqGpKxw=">
在C ++中这段代码:
static string pat4 = " name=\"wtkn\"";
string::size_type wtkn;
if ((wtkn = l.find(pat4)) != string::npos)
{
l.erase(0,401);
l.erase(37,43);
string token = l;
return token;
}
所以我需要来自HTML: 56e45dbe_wNIT / DcufUPvZOL33jmkyqGpKxw = 但是这个字符串大约是37或38个字符。所以擦除东西不是最好的选择。
答案 0 :(得分:1)
使用内置的C ++对象和函数,您可以执行以下操作:
#include <iostream>
#include <string>
std::string getValue(const std::string &html)
{
static const std::string VALUE = "value";
static const char DOUBLE_QUOTE = '"';
std::string result;
std::size_t pos = html.find(VALUE);
if (pos != std::string::npos)
{
std::size_t beg = html.find_first_of(DOUBLE_QUOTE, pos);
if (beg != std::string::npos)
{
std::size_t end = html.find_first_of(DOUBLE_QUOTE, beg + 1);
if (end != std::string::npos)
{
result = html.substr(beg + 1, end - beg - 1);
}
}
}
return result;
}
int main()
{
std::string html = "<input type=\"hidden\" name=\"wtkn\" value=\"56e45dbe_wNIT/DcufUPvZOL33jmkyqGpKxw=\">";
std::cout << "HTML: " << html << "\n";
std::cout << "value: " << getValue(html) << "\n";
return 0;
}
HTML: <input type="hidden" name="wtkn" value="56e45dbe_wNIT/DcufUPvZOL33jmkyqGpKxw=">
value: 56e45dbe_wNIT/DcufUPvZOL33jmkyqGpKxw=
注意:强大的解决方案可能需要进行额外的错误检查。此示例实现还具有一些先决条件(例如,包含value
关键字,后跟打开和关闭双引号之间的所需文本。)
答案 1 :(得分:1)
由于要求很简单,您只需使用标准库string
方法即可解析它。您可以使用find搜索" value="
(与" name=\"wtkn\""
使用的相同,然后搜索下一个双引号("
):
const string deb = " value=\";
size_t deb_pos = l.find(deb);
if (deb_pos == string::npos) throw exception("deb not found");
deb_pos += deb.size();
size_t end_pos = l.find('"', deb_pos);
if (end_pos == string::npos) throw exception("end not found");
string token = l.substr(deb_pos, end_pos);
如果等号周围有额外的空格,或者字符串中有引号双引号(\"
),它会破坏,但是如果你可以确定它不会发生,那可能会足够(小心:未经测试)