C# 我想找到C代码中所有不带括号的if语句。通过正则表达式
我想找到所有C# 我想找到C代码中所有不带括号的if语句。通过正则表达式,c#,regex,code-analysis,C#,Regex,Code Analysis,我想找到所有if语句和for语句,这些语句后面没有花括号“{”。当你在if语句中写一行时,你通常不会把它括在花括号中,所以我想找到所有那些if和for语句 请帮忙 就像我想抓住这句话一样 if (childNode.Name == "B") return TokenType.Bold; 但不是这些 if (childNode.Name == "B") { return TokenType.Bold; } 我想用正则表达式来实现这一点。因为基础数学不允许完美匹配,所以您可以使用
if
语句和for
语句,这些语句后面没有花括号“{
”。当你在if
语句中写一行时,你通常不会把它括在花括号中,所以我想找到所有那些if
和for
语句
请帮忙
就像我想抓住这句话一样
if (childNode.Name == "B")
return TokenType.Bold;
但不是这些
if (childNode.Name == "B")
{
return TokenType.Bold;
}
我想用正则表达式来实现这一点。因为基础数学不允许完美匹配,所以您可以使用一种很好的启发式方法,如“find all”
“if
”,后面跟一个分号,不带中间的大括号:
/\<if\>[^{]*;/
/\[^{]*/
如果\
是适用于您的正则表达式方言的单词开头和单词结尾。还要注意忽略输入中的所有换行符,一些正则表达式处理器需要被告知这样做
您可能也想看看。这是一个对源代码运行大量各种检查的工具。此检查已经存在。如果您想要100%工作的解决方案,则正则表达式将不符合要求。使用真实代码编写正则表达式太容易出错。以下面的正则表达式为例
"^\s*if\W[^{]*\n\s*[^{]"
这将匹配大多数没有大括号包围的“if”语句。但是它很容易被破坏。采取以下示例。正则表达式将错误地用大括号标记这些if语句
示例1
if ( SomeFunction(() => { return 42; }) )
示例2
/* Big comment
if ( true ) {
*/
这一清单不胜枚举
一句话,如果你想要完美,正则表达式是行不通的。如果你对一个不完美的解决方案感到满意,那么上面的正则表达式就应该起作用。你可以在谷歌上搜索有限状态机,找出为什么不可能写出你想要的纯正则表达式 另一方面,一些reg-ex解释器,如Perl语言中的reg-ex解释器,有可能引用先前匹配的表达式,这使得从理论上实现整个C#语法成为可能