gpt4 book ai didi

c# - 查找所有没有括号的 if else 和 else if 语句

转载 作者:行者123 更新时间:2023-11-30 16:03:28 25 4
gpt4 key购买 nike

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

澄清我的意思。在代码中有几个地方(我直到现在才发现)下面的代码是错误的。

if (notInitialized)
Initialize();
AdditionalInitializationNotUseThisWhenAlreadyInitialized();

应该是

if (notInitialized) {
Initialize();
AdditionalInitializationNotUseThisWhenAlreadyInitialized();
}

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

我如何在不检查代码中的每个 if/else/else if 的情况下找到所有这些情况,只检查那些没有花括号的情况?

最佳答案

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

另一个问题是你需要递归匹配,例如跳过尽可能多的 ) ,因为表达式中有嵌套的 '('。只有极少数正则表达式引擎可以做到这一点;幸运的是,.NET 可以通过“平衡组”,但它是棘手且高度高级的应用程序正则表达式。此外,为了使其正常工作,您还必须识别字符串和字 rune 字(用引号引起来),以便不计算其中的括号。

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

\b(if\s*\(((?:[^()"']|'(\\.|[^'\\])'|"(\\.|[^"\\])"|(?<parens>\()|(?<-parens>\)))*(?(parens)(?!))\))|else)\s*[^{\s]

虽然这显示了正则表达式有多么强大,但它非常神秘,真正做到这一点的正确方法实际上是使用真正的解析器(例如 Roslyn)。

关于c# - 查找所有没有括号的 if else 和 else if 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36351067/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com