【发布时间】:2011-07-31 22:37:15
【问题描述】:
我正在为 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 来测试表达式。
【问题讨论】:
-
这是另一种选择(感谢 Wessel):
(?<=#if[\s\t]+[!]?[\s\t]*defined[\s\t]+).*
标签: c# regex regex-group