正则表达式谜题:封装结构
Regexp puzzle : encapsulated structures
所以我在这里尝试做所有程序员可能有一天也必须做的事情。
我的代码中有所有这些嵌套宏,我想在每个 #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++ 中仅使用 正则表达式来完成吗? 太棒了!!!
- 关闭
. matches newline
。
- 将所有
\r\n
替换为 \n
。这使得 Windows 上的正则表达式更加简单。如果需要,您可以稍后将它们改回来。
- 通过将
^#endif.*
替换为 #endif
来清除所有现有的 #endif
标记。
- 我们只需要关注
#if...
和 #endif
行,因此我们通过将 ^(?!#(if|endif)).*
替换为 ;[=19=]
来忽略所有其他行。所以 ;
是我们的 'ignore' 标记。
- 接下来,我们重复修改
#if
- #endif
对,它们之间只有忽略的线。
所以,重复 'Replace All'
^#if(.+)\n((;.*\n)*)#endif
和
;#if\n;#endif /* */
。
这会将评论应用于所有 #if
-
#endifs
在最底层的嵌套层,然后用 ;
标记,所以下次点击 'Replace All' 时,它们将被忽略。
- 完成后,通过将
^;(.+?\n)
替换为
来删除忽略标记。
瞧!
所以我在这里尝试做所有程序员可能有一天也必须做的事情。
我的代码中有所有这些嵌套宏,我想在每个 #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++ 中仅使用 正则表达式来完成吗? 太棒了!!!
- 关闭
. matches newline
。 - 将所有
\r\n
替换为\n
。这使得 Windows 上的正则表达式更加简单。如果需要,您可以稍后将它们改回来。 - 通过将
^#endif.*
替换为#endif
来清除所有现有的#endif
标记。 - 我们只需要关注
#if...
和#endif
行,因此我们通过将^(?!#(if|endif)).*
替换为;[=19=]
来忽略所有其他行。所以;
是我们的 'ignore' 标记。 - 接下来,我们重复修改
#if
-#endif
对,它们之间只有忽略的线。
所以,重复 'Replace All'^#if(.+)\n((;.*\n)*)#endif
和;#if\n;#endif /* */
。
这会将评论应用于所有#if
-#endifs
在最底层的嵌套层,然后用;
标记,所以下次点击 'Replace All' 时,它们将被忽略。 - 完成后,通过将
^;(.+?\n)
替换为来删除忽略标记。
瞧!