是否可以在Visual Studio中进行查找和替换,用一组括号替换特定函数集(所有函数都具有相同签名)的结束括号?
替换它:
int foo(int)
{
something;
}
有了这个:
int foo(int)
{
something;
}
}
我能够提出的唯一方法是不使用复制/粘贴来使用正则表达式来识别这一点:
}
int foo2(int)
并替换为:
}
}
int foo2(int)
利用了大多数匹配函数的顺序。它仍然不完美,因为它会错过序列中的最后一个。一个更干净的方式会很好,但我不确定是否有一个。我怀疑可能存在的唯一原因是因为intellisense。我想也许我可以利用visual studio知道函数何时开始和结束的事实。
相信我,在我的具体情况下,这样做会有语法意义。谢谢。
答案 0 :(得分:0)
我不相信只有正则表达式有一个更清洁的解决方案。不幸的是,虽然正则表达式可以匹配模式,但它们不能代表语法,例如匹配开始和结束括号。
为了稍微探讨一下,让我说我写了一些正则表达式来找到一个开括号,接受其他字符,然后是一个结束括号。这不起作用,因为在
的情况下void foo()
{
if (bar)
{
}
}
它会匹配foo的开始括号和bar的右括号。我们需要一些方法来计算开始和结束括号,正则表达式不会给我们任何方法。
这就是为什么编译器通常会将代码分解为两个主要步骤:
扫描,代码分为void
,foo
,(
,)
,{
}等令牌。可以使用正则表达式或以类似方式匹配标记的代码来完成。
解析,根据语言的语法组织令牌,通常会产生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