私は正規表現に比較的慣れていないため、これが私の問題を解決する方法であるかどうかはまだわかりませんが、ここに行きます.
次のような内容を含む可能性のあるテキスト ファイルがあります。
program A {
int x = 10;
tuple date {
int day;
int month;
int year;
}
}
function B {
int y = 20;
...
}
process C {
more code;
}
プログラム、関数、またはプロセスの間にあるテキストを抽出する必要があります。したがって、ヘッダーは 3 種類しかありません。
そこで、正規表現を使用して中括弧内のテキストを取得することにしました。私が始めた方法は、識別子のリストを事前に知っていると仮定して、次の式を使用することです。
(program|function|process)+ A[\s\S]*(?=function)
これは、プログラム A の任意のテキストをキャプチャするのに最適です。ただし、プログラム A の後に関数が続かない場合があります。その後に、プロセスまたは別のプログラムが続く場合があります。最後のグループに OR を追加すると、正しく機能しなくなります。
(program|function|process)+ A[\s\S]*(?=function|process|program)
私がそれを見る方法は、3つのオプションによるものです。
- 正規表現を使用しますが、上記は実行可能ですか?
- 中かっこを追跡するためですが、入力に中かっこがない場合はどうなりますか。一致するブラケットが別のコード セットで見つかった場合、エラーをスローするのは難しい場合があります。
- 文脈自由文法を使用していますが、このオプションは最後に残しています。
前もって感謝します!
PS: RegExpr を支援するためにこれを使用しました: http://gskinner.com/RegExr/?33i30