首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >查找all if else和else if语句(不带括号)

查找all if else和else if语句(不带括号)
EN

Stack Overflow用户
提问于 2016-04-01 08:01:24
回答 2查看 579关注 0票数 3

我在c#中有一堆代码,在这些代码行中,不带圆括号的if或else语句有一些额外的行,这会导致错误行为。我正在寻找一个正则表达式,以找到所有可能发生这个问题的地方,以便我可以手动查找它。

来澄清我的意思。代码中有一些地方(到目前为止我发现),下面的代码是错误的。

代码语言:javascript
运行
复制
if (notInitialized)
    Initialize();
    AdditionalInitializationNotUseThisWhenAlreadyInitialized();

这应该是

代码语言:javascript
运行
复制
if (notInitialized) {
    Initialize();
    AdditionalInitializationNotUseThisWhenAlreadyInitialized();
}

我试过这个if\s*\(.*\)([\n\r\s[^{]]*.*);*,但它不仅给了我想要的结果。它也有if (notInitialized) {部件。我几乎没有使用regex的经验。

在代码中,如果没有检查所有这些情况,只检查那些没有大括号的情况,我怎么找到这些情况呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-01 08:09:03

您面临的一个问题是正则表达式在.*上尽可能多地匹配以找到模式匹配。因此,根据所使用的选项(例如,.匹配除\n以外的任何东西),您将得到不满意的结果。

另一个问题是,您需要递归匹配,例如跳过嵌套的'(‘)表达式中的)。只有极少数的regex引擎能够做到这一点;幸运的是,.NET可以通过“平衡组”来实现,但是regex的应用程序非常复杂,而且非常高级。此外,要使其正确工作,还必须识别字符串和字符文字(以引号表示),因为在这些字符串和字符中不计算父母。

编辑这个用于.NET的正则表达式应该非常可靠地找到这些if和.NET语句:

代码语言:javascript
运行
复制
\b(if\s*\(((?:[^()"']|'(\\.|[^'\\])'|"(\\.|[^"\\])"|(?<parens>\()|(?<-parens>\)))*(?(parens)(?!))\))|else)\s*[^{\s]

虽然这显示了regexes的强大功能,但它非常神秘,正确的方法是使用真正的解析器(比如Roslyn)。

票数 3
EN

Stack Overflow用户

发布于 2016-04-01 08:22:06

你可以用这个:

代码语言:javascript
运行
复制
if \(.+?\)[^{]*?\n[^{]*?[^{]

如果您没有这种格式的ifs

代码语言:javascript
运行
复制
if (notInitialized) 
{
    Initialize();
    AdditionalInitializationNotUseThisWhenAlreadyInitialized();
}

这也适用于:

代码语言:javascript
运行
复制
if \(.+?\)[^{]*?\n

它将检测,如果一行与" if“没有{在末尾。它也稍微短一点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36351067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档