gpt4 book ai didi

c - 正则表达式谜题 : encapsulated structures

转载 作者:行者123 更新时间:2023-11-30 14:56:29 25 4
gpt4 key购买 nike

所以我在这里尝试做一些所有程序员有一天可能也必须做的事情。

我的代码中有所有这些嵌套宏,我想在每个 #endif 旁边添加注释,其中 #if 它关闭 - 如果还没有注释。正则表达式可以为我做到这一点吗?到目前为止,* 和 + 在 Notepad++ 中已经太贪婪了,即使我使用理论上的惰性版本 *?和+? ...

例如这个

#if A

Code

#if B

Code

#if C

Code

#endif

Code

#endif /* B */

Code

#endif

进入此

#if A

Code

#if B

Code

#if C

Code

#endif /* C */

Code

#endif /* B */

Code

#endif /* A */

最佳答案

这可以用一个正则表达式来完成吗?天哪,不!

可以在 Notepad++ 中仅使用正则表达式来完成此操作吗? 天啊,是的!!!

  1. 关闭。匹配换行符
  2. 将所有 \r\n 替换为 \n。这使得 Windows 上的正则表达式更加简单。如果需要,您可以稍后将其更改回来。

  3. 通过将 ^#endif.* 替换为 #endif 来清除所有现有的 #endif 标记。

  4. 我们只需要关注 #if...#endif 行,因此我们通过替换 ^(?!#( if|endif)).*;$0。所以 ; 是我们的“忽略”标记。

  5. 接下来,我们反复更改 #if - #endif 对,仅忽略它们之间的行。
    因此,反复“全部替换”
    ^#if(.+)\n((;.*\n)*)#endif

    ;#if$1\n$2;# endif/* $1 */.

    这会将注释应用于所有#if -#endifs 在最低嵌套级别,然后用 ; 标记它们,这样下次您单击“全部替换”时,它们就会被忽略。
  6. 完成后,通过将 ^;(.+?\n) 替换为 $1 来删除忽略标记。

瞧!

关于c - 正则表达式谜题 : encapsulated structures,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44652379/

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