【发布时间】:2013-09-29 00:19:08
【问题描述】:
我尝试在 Delphi 中使用正则表达式来解决 C PreProcessor 指令。例如,我有一些包含
的文本文件#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 和应该(不)定义的键+其他所有内容。
有正则表达式的解决方案吗?正则表达式是这种事情的最佳解决方案吗?
【问题讨论】:
-
正则表达式几乎肯定不是解决问题的最佳方法。例如,您将如何处理嵌套?如果你想要一个解析器,就写一个解析器。
-
@Carl Norum:事实上,我知道不会有嵌套——至少现在是这样。好吧。我希望有一个简单的正则表达式解决方案。如果没有,我将不得不编写一个解析器。
标签: regex delphi pcre preprocessor-directive