2016-10-24 84 views
0

我寫了一個用於查找範圍的正則表達式('{'|'}')。我想找到沒有評論的範圍,但我不明白我犯的錯誤。下面是代碼片段:正則表達式中的條件qt

while (start >= 0 && end >=0) { 
     start = text.indexOf("\n", start); 
     end = text.indexOf(QRegExp("^.*[{](?!=[//]|[/*]|[*]))"),start); 
     end2 = text.indexOf(QRegExp("^.*[}](?!=[//]|[/*]|[*]))"), start); 
     if (end < end2) { 
      text.replace(end,"\n{\n"); 
     } 
     else text.replace(end2,"\n}\n"); 
     ++start; 
    } 

例如,我們有一些文字:

所有的
//dfsdkfj ksjdfksjdf { <- this symbol should be skipped 
public SystemBlock() 
{ //<- this symbol should be found. 
    this.producer = "none"; 
    this.motherBoard = "none"; 
    this.processor = "none"; 
    this.ram = "none"; 
    this.gpu = "none"; 
    this.price = 0; 
    this.eventSupport = null; 
} 
+0

起初,逃避花括號:'\\ {'和 '\\}'。他們可能被解釋爲量化者。 – ilotXXI

回答

0

首先,這是一般不可能正確解析C++代碼使用正則表達式。考慮嵌套註釋,行延續,包含"//","/*"等的字符串!

其次,它通常很難有一個正則表達式而不是匹配的東西。有關更多詳細信息,請參見this question

您的具體實例可以用這樣的正則表達式解析:^(?!(//|/\*))*{

end = text.indexOf(QRegExp("^(?!(//|/\\*))*\\{"),start); 
    end2 = text.indexOf(QRegExp("^(?!(//|/\\*))*\\}"), start); 
+0

感謝您的回答,但它仍然無法正常工作。它的表達總是返回-1。 – Max

+0

另外,qt regexp不會將「{」分析爲孤獨符號,因此我們必須使用序列範圍「[{]」,並在此操作後正確解析符號「{」。 – Max

+0

然後逃避它:'\\ {' – rustyx