program A {
int x = 10;
tuple date {
int day;
int month;
int year;
}
}
function B {
int y = 20;
...
}
process C {
more code;
}
program
、、の外側の中括弧の内側にあるものをすべて抽出したいと思いfunction
ますprocess
。出力に関しては、次の3つの一致を見たいと思います。
int x = 10;
tuple date {
int day;
int month;
int year;
} //first match
int y = 20;
... //second match
more code; //third match
私はJavascriptを使用してこれを達成しました。私が使用する正規表現はです。これは、 Rubular/(program|function|process).*?{(.*?)}\n+(program|function|process)/m
で示されているように機能します。
ただし、Javaで同じ式を使用すると、それ以上機能しなくなります。最初の一致のみを返します。前回の一致で消費されたテキストが再び一致しないという漠然とした記憶があります。私の場合、キーワードprogram
とfunction
は最初の一致で消費されたため、それ以上一致しません。消費されたテキストを照合する方法はJavaにありますか?
編集:Javaコードは、要求に応じて以下に掲載されています。
public class Test {
public static void main(String[] args) throws IOException {
String input = FileUtils.readFileToString(new File("input.txt"));
Pattern p = Pattern.compile("(program|function|process)[^\\{]*?\\{(.*?)\\}\\s*(program|function|process)", Pattern.DOTALL);
Matcher m = p.matcher(input);
while(m.find()) {
System.out.println(m.group(2));
}
}
}