Delphi で正規表現を使用して、C PreProcessor ディレクティブを解決しようとしています。例として、次を含むテキストファイルがあります
#define test
#ifdef test
foo
#else
bar
#endif
私が知りたいのは、最初の試合でそれが ifdef か ifndef かということです。
2 番目の試合では、何を定義する必要があるか (定義しないか) を取得したいと考えています。
3 番目は、#else または #endif までのすべてです。
#else の場合、#else はマッチ 4 のコンテンツである必要があります。
マッチ 5 は再びコンテンツになり、マッチ 6 は
BTW の #endif のみを保持します。一致する \n または \r は気にしません。それらはフィルタリングされます。
私の最初の試みは次の正規表現でした:
/#(ifn?def) +(.*)\n(.*)(#else)?(.*)?(#endif)/si
これは絶対に機能しませんでした。そして、私が何をしようとしても、#ifdef と、定義されるべき (定義されない) キー + 2 番目の一致で他のすべてのものしか取得できません。
正規表現の解決策はありますか? 正規表現はこの種のことに対する最良の解決策ですか?