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() 有啥用?的主要内容,如果未能解决你的问题,请参考以下文章