正则表达式中的条件qt

时间:2016-10-24 13:30:40

标签: c++ qt5

我写了一个正则表达式来查找范围(' {' |'}')。我想找到没有评论的范围,但我不知道我哪里有错误。以下是代码片段:

    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;
}

1 个答案:

答案 0 :(得分:0)

首先,通常无法使用正则表达式正确解析C ++代码。考虑嵌套注释,续行,包含"//""/*"等的字符串!

其次,通常很难让正则表达式匹配。有关详细信息,请参阅this question

您的具体示例可以使用以下正则表达式进行解析:^(?!(//|/\*))*{

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