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

Posted

技术标签:

【中文标题】QRegExp::pos() 没有相应的 QRegExp::len() 有啥用?【英文标题】:What use is QRegExp::pos() without a corresponding QRegExp::len() of sorts?QRegExp::pos() 没有相应的 QRegExp::len() 有什么用? 【发布时间】: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。

【问题讨论】:

【参考方案1】:

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

【讨论】:

当然,这就是我要做的,但我很好奇 QRegExp::pos() 有什么我无法想象的用途。

以上是关于QRegExp::pos() 没有相应的 QRegExp::len() 有啥用?的主要内容,如果未能解决你的问题,请参考以下文章

由于错误消息而无法计算 sqrt 函数 [关闭]

027_事物方法没有添加相应的开头

有没有办法防止一串没有空格的字母溢出其相应的边界?

burgermenu的下降没有做出相应的反应

Android进度没有相应地工作

Maven 导包后,在Maven Dependencies 里面却没有相应的包