我有兩個QRegExp對象,用於搜索某些文本的開始和結束。我的代碼看起來是這樣的:Qt的QRegExp和方法命令
// strText defined earlier
QRegExp start(...);
QRegExp end(...);
int iStart = start.indexIn(strText);
int iEnd = end.indexIn(strText, iStart) + end.matchedLength();
我有一個關於這個代碼的兩個問題:
(1)假設每個正則表達式是尋找文本中找到。調用上面的代碼在運行時調用以下錯誤:
TerminalWindow.exe中0x66b48b3f未處理的異常:0xC0000005:訪問衝突讀取位置0x00000004。
我得到同樣的錯誤,如果我改變周圍的代碼如下:
int iStart = start.indexIn(strText);
int iTemp = end.matchedLength();
int iEnd = start.indexIn(strText, iStart) + iTemp;
在這第二代碼片段的錯誤對我來說很有意義,因爲內部matchedLength()可能是針對一個對象運行尚未分配。但是,我不明白爲什麼我會從第一個代碼片段中獲得相同的錯誤。在所有其他條件相同的情況下,不是從左到右的操作順序?如果我的代碼更改爲以下內容,然後我得到的結果我想到:
// strText defined earlier
QRegExp start(...);
QRegExp end(...);
int iStart = start.indexIn(strText);
int iEnd = end.indexIn(strText, iStart);
iEnd += end.matchedLength();
(2)如果strText的從我的例子看起來像:
<start>
stackoverflow is awesome!
</start>
<start>
I like cake!
</start>
<start>
Girls are pretty!
</start>
我如何寫一個Qt的正則表達式那會捕獲每個啓動元素的內容?就像:
QRegExp reg("<start>(.*?)</start>");
即使它似乎應該與POSIX正則表達式(這是我相信Qt實現)一起工作,我永遠不會爲我工作。 (注意:我知道理想的方法是使用XML/HTML解析器(我實際上解析HTML),但我現在對正則表達式解決方案感興趣)。
謝謝!
我沒有收到任何有關答案的反饋。你能告訴我它是否有用嗎?如果不是,我可以改進它。 – Vicent