【发布时间】:2016-09-23 13:18:51
【问题描述】:
在我正在进行的一个项目中,我需要在所有 QRegExp 中创建一个 QStringList 捕获 except 为其中 2 个:第一个和另一个,取决于其他一些参数。
直接的方法是使用QRegExp::capturedTexts(),然后从返回的列表中删除两个不需要的项目。然而,这意味着需要分配两个QStrings 和相关QList 的节点只是为了在没有任何实际用途的情况下被丢弃,这似乎很浪费。
然后我想我会通过QRegExp::cap() 自己构建一个QStringList 一个捕获的文本。但是QRegExp::cap() 是itself implemented in terms of QRegExp::capturedTexts(),这至少会让我的代码看起来很有趣。
所以我查看了 API,发现了非常方便的 QRegExp::pos() 方法,文档指出,该方法«返回搜索字符串中第 n 个捕获的文本的位置。»
相当整洁,我想,然后我可以使用QString::mid() 并自己构建QStringList。毕竟这是what the actual implementation 中的QRegExp::capturedTexts() does。
除了我不知道如何检索第n 个捕获的文本length,我需要通过QString::mid() 提取捕获的文本。实际上,任何捕获的文本的位置和长度都存储在另一个旁边,如QRegExp::pos() implementation 中的can be seen,但是没有长度信息的访问器,除非我完全弄错了,a我提前道歉的情况。 :)
所以,这是我的问题:如果我是正确的并且无法检索任何给定的捕获文本的长度,QRegExp::pos() 有什么用例?我无法想象在任何情况下我都想知道捕获的文本从哪里开始,但无法检索它。
__
PS。 Qt5 QRegularExpressionMatch 类提供了方法 capturedStart() 和 capturedEnd() 来填补这个空白,但我坚持使用 Qt4.8.6。
【问题讨论】: