查找和替换方法结束括号

时间:2013-07-15 12:06:39

标签: c regex

是否可以在Visual Studio中进行查找和替换,用一组括号替换特定函数集(所有函数都具有相同签名)的结束括号?

替换它:

int foo(int)
{
    something;
}

有了这个:

int foo(int)
{
    something;
}
}

我能够提出的唯一方法是不使用复制/粘贴来使用正则表达式来识别这一点:

}

int foo2(int)

并替换为:

}
}

int foo2(int)

利用了大多数匹配函数的顺序。它仍然不完美,因为它会错过序列中的最后一个。一个更干净的方式会很好,但我不确定是否有一个。我怀疑可能存在的唯一原因是因为intellisense。我想也许我可以利用visual studio知道函数何时开始和结束的事实。

相信我,在我的具体情况下,这样做会有语法意义。谢谢。

2 个答案:

答案 0 :(得分:0)

我不相信只有正则表达式有一个更清洁的解决方案。不幸的是,虽然正则表达式可以匹配模式,但它们不能代表语法,例如匹配开始和结束括号。

为了稍微探讨一下,让我说我写了一些正则表达式来找到一个开括号,接受其他字符,然后是一个结束括号。这不起作用,因为在

的情况下
void foo()
{
    if (bar)
    {
    }
}

它会匹配foo的开始括号和bar的右括号。我们需要一些方法来计算开始和结束括号,正则表达式不会给我们任何方法。

这就是为什么编译器通常会将代码分解为两个主要步骤:

  1. 扫描,代码分为voidfoo(){}等令牌。可以使用正则表达式或以类似方式匹配标记的代码来完成。

  2. 解析,根据语言的语法组织令牌,通常会产生Abstract Syntax Tree

答案 1 :(得分:0)

我曾经做过类似的工作。 你可以把

^{:i:b+:i\(.*\).*\n\{\n(:b+.*\n|:Wh\n)*}\}

在“查找输入框”和

\1}\n}

在“替换为输入框”中。

上述查找模式可以找到以下形式的任何代码块:

xxx xxx(xxxxxxxxx)
{
xxxxxxxxx
xxxxxxxxx
xxxxxxxxx
}

并将其替换为:

xxx xxx(xxxxxxxxx)
{
xxxxxxxxx
xxxxxxxxx
xxxxxxxxx
}
}

如果您仍然不知道如何在visual studio中使用正则表达式,请参阅 http://msdn.microsoft.com/en-us/library/2k3te2cs(v=vs.80).aspx