2016-10-24 8 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++のコードを解析するために、一般的には不可能です。ネストされたコメント、行の継続、文字列"//""/*"などを考えてみてください!

第2に、正規表現を持つことは難しいですと一致します。詳細はthis questionを参照してください。

しかしあなたの具体的な例は、このような正規表現で解析することができます。中括弧をエスケープし、最初に

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

あなたの答えをありがとうが、それでも動作しません。式は常に-1を返します。 – Max

+0

qt regexpは "{"を孤独なシンボルとして解析しないため、シーケンススコープ "[{]"を使用しなければならず、シンボル '{'はこの操作の後に正しく解析されます。 – Max

+0

それからそれをエスケープしてください: '\\ {' – rustyx