Ich schreibe einen einfachen Textgrabber für den C-Style Präprozessor. Der Eingabetext (Beispiel):
#if 1 > 0
blah
#if defined MACRO1
blah blah blah
#if !defined MACRO2
blaaaah
#if ! defined MACRO3
blah?
Ich möchte den Text erfassen, der nach jedem #if [!] defined
Erklärung. Die Ausgabe, die ich aus dem obigen Text benötigen würde, ist:
MACRO1
MACRO2
MACRO3
Die hier zu erfassenden Zeilennummern sind 3, 5 und 7. Beachten Sie, dass in Zeile 7 Leerzeichen mit Tabulatoren vermischt sind.
Ich habe versucht, Ausdrücke zu erstellen, die mir dieses Ergebnis liefern können, aber keiner war so brillant. Mein Ausdruck, der das gewünschte Ergebnis liefert, ist
(?<=(?<=(?<=(?<=(?<=(?<=#if)[\s\t]+)!?)[\s\t]*)defined)[\s\t]+).*
Verwendete Optionen sind: Mehrzeilig + IgnorierenGroßschreibung
Aber ich bin sicher, dass dies nicht elegant und prägnant ist. Kann jemand bitte einen besseren Ausdruck vorschlagen?
PS - Ich verwende Expresso um den Ausdruck zu testen.