如何读取分号从QString中分离出某些值?

时间:2012-06-11 18:33:08

标签: c++ string qt parsing kde

我正在使用Qt / KDE开发一个应用程序。在为此编写代码时,我需要读取包含(;分隔的)

之类的值的QString
<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";
    }

即如果我只需要存在属性(而不是其值),我就会手动寻找文本并设置属性是否存在。然而,对于像“type”这样的属性以及其实际值需要存储在QString中的名称,这种方法失败了。虽然我知道这可以通过将整个字符串拆分为分隔符;然后搜索属性或其值来完成,但我想知道是否有更清晰且更有效的方法。

2 个答案:

答案 0 :(得分:2)

  

我需要将每个属性(如rel,type和name)读入不同的QString。

是否有保证此字符串始终为URL?

  

我想知道是否有更清洁,更有效的方法。

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

但是,请确保您的字符串是格式正确的网址(以便QURL不拒绝它)。

答案 1 :(得分:2)

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

1:拆分字符串

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

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

您也可以使用RegExp:

regexp = "^([a-z]+)\s*=\s*(.*)$";
id = \1 of the regexp;
value = \2 of the regexp;