QRegExp::pos() 没有相应的 QRegExp::len() 有什么用?

What use is QRegExp::pos() without a corresponding QRegExp::len() of sorts?

在我正在处理的一个项目中,我需要为其中两个进行 QStringList out of all QRegExp 捕获 除了 :第一个和另一个,取决于其他一些参数。

直接的方法是使用 QRegExp::capturedTexts(),然后从返回的列表中删除两个不需要的项目。然而,这意味着需要分配两个 QStrings 和相关 QList 的节点,只是为了在没有任何实际用途的情况下被扔掉,这看起来很浪费。

然后我想我会通过 QRegExp::cap() 自己构建一个 QStringList 一个捕获的文本。但是 QRegExp::cap()itself implemented in terms of QRegExp::capturedTexts(),这至少会让我的代码看起来很有趣。

所以我查看了 API 并找到了非常方便的 QRegExp::pos() 方法,文档指出,«Returns 第 n 个捕获的位置搜索字符串中的文本。»

非常简洁,我想,毕竟我可以使用 QString::mid() and build the QStringList myself. This is what the actual implementation of QRegExp::capturedTexts() does

除非我不知道如何检索第 n 个捕获的文本 length,我需要通过 QString::mid() 提取捕获的文本。事实上,任何捕获的文本的位置和长度都一个接一个地存储,如 can be seen in the QRegExp::pos() implementation,但是没有长度信息的访问器,除非我错得离谱,对此我深表歉意进步。 :)

所以,这是我的问题:如果我是正确的并且无法检索任何给定的捕获文本的长度,那么 QRegExp::pos() 有什么用例?我无法想象在任何情况下我都想知道捕获的文本从哪里开始,但无法检索它。

__

PS。 Qt5 QRegularExpressionMatch class provides the methods capturedStart() and capturedEnd() 填补了这个空白,但我仍然坚持使用 Qt4.8.6。

这是一个 API 错误。就这样。我希望它有一些魔术——据我所知没有。我不会太担心分配 capturedTexts return 值,除非这是一个在大量文本上调用的解析器。使用你所拥有的 - 可能你花在调整上的任何时间在这一点上都是浪费时间,除非你通过这个东西推动数百万行文本。