如何读取分号将某些值与 QString 分开

How to read semicolon separated certain values from a QString?

本文关键字:分开 QString 何读取 读取      更新时间:2023-10-16

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

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

我需要将每个属性(如rel,类型和名称)读取到不同的QString中。到目前为止,我采取的分配是这样的

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

也就是说,如果我只需要为属性的存在(而不是其值)而烦恼,我正在手动查找文本并设置该属性是否存在。但是,对于"类型"和名称等属性,此方法失败,其实际值需要存储在QString中。虽然我知道这可以通过在分隔符;拆分整个字符串然后搜索属性或其值来完成,但我想知道是否有一种更干净、更有效的方法。

据我了解,数据并不总是 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;

我需要将每个属性(如rel,类型和名称)读取到不同的QString中。

是否可以保证此字符串将始终是 URL?

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

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

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