正则表达式简化 - 组太多了
我正在为C-Style预处理器编写一个简单的文本抓取器。输入文本(示例):
#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)[st]+)!?)[st]*)defined)[st]+).*
使用的选项有:Multiline + IgnoreCase
但我确信这不优雅,简洁。
有人可以建议更好的表达吗?
PS - 我正在使用Expresso来测试表达式。
没有找到相关结果
已邀请:
4 个回复
死簇
将发现MACRO01,MACRO02和MACRO03为3次捕获
妒垮
在后向引用中,你得到MACRO1 / MACRO2 / MACRO3。
恋卡
之前的正则表达式只有一个定义的捕获组( w *),以便只获取宏名称。 捕获组将填充所有宏名称出现。 * PS:必须使用多行+忽略大小写选项执行正则表达式。我使用RegExr工具测试了那个http://gskinner.com/blog/archives/2008/03/regexr_free_onl.html*
暑袜眠退
没有多线选项?