gpt4 book ai didi

regex - CPP 指令#ifdef 正则表达式解决方案

转载 作者:行者123 更新时间:2023-12-03 18:32:06 26 4
gpt4 key购买 nike

我尝试在 Delphi 中使用正则表达式来解决 C 预处理器指令。例如,我有一些文本文件,其中包含

#define test
#ifdef test
foo

#else

bar
#endif

我想知道在我的拳头比赛中是 ifdef 还是 ifndef。
在我的第二场比赛中,我想知道应该(不)定义什么。
第三个是#else 或#endif 之前的一切。
如果是#else,#else应该是匹配4的内容。
第 5 场比赛将再次成为内容,而第 6 场比赛将仅包含 #endif
顺便说一句。我不在乎比赛中的\n 或\r。他们将被过滤。

我的第一次尝试是以下正则表达式:
/#(ifn?def) +(.*)\n(.*)(#else)?(.*)?(#endif)/si

这绝对不起作用。无论我尝试什么,我都只能得到 #ifdef 和应该(不)定义的键 + 第二场比赛中的所有其他内容。

有正则表达式的解决方案吗?正则表达式是这种事情的最佳解决方案吗?

最佳答案

由于子表达式 4 和 5 是可选的,贪婪的第二个和第三个子表达式最终会吞噬一切,即使 #else出现在您的输入中。你需要让他们不贪婪。为确保仅在子表达式 4 匹配时才填充子表达式 5,请将一个放在另一个中。你最终会得到这个:

/#(ifn?def) +(.*?)\n(.*?)(#else(.*))?(#endif)/si

我会将子表达式 4 设为非捕获组,并且我根本不会费心将子表达式 6 分组,因为两者的内容都可以通过上下文推断出来。

关于regex - CPP 指令#ifdef 正则表达式解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18970498/

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