2016-09-23 29 views
2

在我正在進行的一個項目中,我需要在所有QRegExp捕獲中製作一個QStringList,除了其中兩個:第一個和其他參數之一,取決於其他一些參數。什麼是QRegExp :: pos()沒有相應的QRegExp :: len()的排序?

直接的方法是使用QRegExp::capturedTexts(),然後從返回的列表中刪除兩個不需要的項目。然而這意味着兩個QStrings和相關的QList的節點需要被分配,而沒有任何實際使用,這看起來很浪費。

我之後認爲我自己會在QRegExp::cap()的時候自己創建一個QStringList。但是QRegExp::cap()itself implemented in terms ofQRegExp::capturedTexts(),這會使我的代碼看起來很有趣,至少。

所以我看着API,發現相當方便QRegExp::pos()方法,其中,文檔指出,«返回搜索字符串中的第n個捕獲文本的位置。»

整齊漂亮,我想,那麼我可以使用QString::mid()並自己構建QStringList。畢竟,這是what the actual implementationQRegExp::capturedTexts()does

除了我不知道如何檢索第n個捕獲的文本長度,我需要通過QString::mid()提取捕獲的文本。事實上,任何捕獲的文本的位置和長度都被一個存儲在另一個旁邊,如can be seenQRegExp::pos()implementation中,但沒有長度信息的訪問者,除非我非常錯誤,我在其中道歉提前。 :)

所以,這裏是我的問題:如果我是正確的,並且沒有辦法檢索任何給定的捕獲文本的長度,QRegExp::pos()有哪些用例?我無法想象任何我想知道被捕獲文本的開始位置的情況,而無法檢索它。

__

PS。 Qt5 QRegularExpressionMatch類提供了填充這個空白的方法capturedStart()capturedEnd(),但我堅持使用Qt4.8.6。

回答

1

這是一個API錯誤。就這樣。我希望有一些魔術技巧 - 據我所知,沒有。除非這是一個在大量文本上調用的解析器,否則我不會太在意分配capturedTexts返回值。使用你所擁有的東西 - 可能任何時候你花費在調整這個是浪費在這一點上,除非你通過這件事情推動了數百萬行的文本。

+0

這就是我要做的,當然,但我很好奇QRergExp :: pos()有哪些用途,我無法想象。 –