我正在为 C 样式预处理器编写一个简单的文本抓取器。输入文本(示例):
#if 1 > 0
blah
#if defined MACRO1
blah blah blah
#if !defined MACRO2
blaaaah
#if ! defined MACRO3
blah?
我想捕获每个#if [!] defined
语句之后的文本。我需要从上述文本中得到的输出是:
MACRO1
MACRO2
MACRO3
此处需要捕获的行号是 3、5 和 7。请注意,第 7 行有空格和制表符。
我试图创建可以给我这个结果的表达式,但没有一个如此出色。我给出预期结果的表达是-
(?<=(?<=(?<=(?<=(?<=(?<=#if)[\s\t]+)!?)[\s\t]*)defined)[\s\t]+).*
使用的选项是:Multiline + IgnoreCase
但我确信这并不优雅和简洁。有人可以建议更好的表达方式吗?
PS - 我正在使用Expresso来测试表达式。