ブレインファック コード内のすべてのループを取得できる正規表現を作成したいと思います。
このコードが与えられたとしましょう:
++++[>+[>,++.]<<-]++[>,.<-]
これら 3 つのループを取得したい (実際には、最初のループを取得するだけで十分です)。
[>+[>,++.]<<-]
[>,++.]
[,.<-]
私の正規表現の知識はかなり貧弱なので、基本的なことしかできません。私が考えたのは、次の表現です。
\[[-+><.,\[\]]*]
\[ - Match the first (opening) bracket
[-+><.,\[\]]* - followed by a number of brainfuck operators
] - followed by a closing bracket
ただし、これは(明らかに)最初の開始ブラケットと最後の終了ブラケットの間のすべてに一致します。
[>+[>,++.]<<-]++[>,.<-]
最後の閉じ括弧に一致する前に、ループ内の同じ数の開き括弧と閉じ括弧をテストする必要がある場合があります-それが理にかなっている場合。
たぶん、ルックアラウンド(javascriptでこれを使用する必要があるため、lookaheadsしか使用できません)がこれを行う正しい方法ですが、どのように行うべきかわかりません。