我写了一个正则表达式来查找范围(' {' |'}')。我想找到没有评论的范围,但我不知道我哪里有错误。以下是代码片段:
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 :(得分:0)
首先,通常无法使用正则表达式正确解析C ++代码。考虑嵌套注释,续行,包含"//"
,"/*"
等的字符串!
其次,通常很难让正则表达式不匹配。有关详细信息,请参阅this question。
但您的具体示例可以使用以下正则表达式进行解析:^(?!(//|/\*))*{
:
end = text.indexOf(QRegExp("^(?!(//|/\\*))*\\{"),start);
end2 = text.indexOf(QRegExp("^(?!(//|/\\*))*\\}"), start);