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を使用して式をテストしています。