Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我想找到C代码中所有不带括号的if语句。通过正则表达式_C#_Regex_Code Analysis - Fatal编程技术网

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#语法成为可能