1

我正在使用 Qt/KDE 开发应用程序。在为此编写代码时,我需要读取一个 QString ,其中包含像 ( ;delimited)这样的值

<http://example.com/example.ext.torrent>; rel=describedby; type="application/x-bittorrent"; name="differentname.ext"

我需要将每个属性(如 rel、type 和 name)读入不同的QString. 到目前为止我采取的方法是这样的

if (line.contains("describedby")) {
        m_reltype = "describedby" ;
    }
    if (line.contains("duplicate")) {
        m_reltype = "duplicate";
    }

也就是说,如果我只需要对属性的存在(而不是它的值)感到困扰,我将手动查找文本并设置属性是否存在。然而,这种方法对于“类型”和名称等属性的实际值需要存储在QString. 虽然我知道这可以通过在分隔符处拆分整个字符串;然后搜索属性或其值来完成,但我想知道是否有一种更清洁、更有效的方法。

4

2 回答 2

2

我需要将每个属性(如 rel、类型和名称)读入不同的 QString。

是否保证该字符串始终是 URL?

我想知道是否有一种更清洁、更有效的方法。

不要重新发明轮子!您可以使用QURL::queryItemswhich 来解析这些查询变量并返回名称-值对的映射。

但是,请确保您的字符串是格式正确的 URL(这样QURL就不会拒绝它)。

于 2012-06-11T18:46:23.770 回答
2

据我了解,数据并不总是一个 URL。所以,

1:拆分字符串

2:对于每个子字符串,将标识符与值分开:

id = str.mid(0,str.indexOf("="));
value = str.mid(str.indexOf("=")+1);

您还可以使用正则表达式:

regexp = "^([a-z]+)\s*=\s*(.*)$";
id = \1 of the regexp;
value = \2 of the regexp;
于 2012-06-11T18:50:18.810 回答