2017-11-17 21 views
1

したがって、JavaでBrainfuckトランスレータを書く過程で、次の規則に従って文字列を分割する必要があります。[ ] , .文字または+ - < >の任意のシーケンスの後に改行を続ける必要があります。ここで入力された文字列があります:正規表現が常にアングルブラケットで動作しない

..-<[-]>..[[<<[+[-<-->>+,>-.++]-,>,<[.],][<.,<-]+[-,<->,-]<<[>->-.<-[.<++,>++,].-]]] 

そして、私のコード:

s = s.replaceAll("(\\+|-|<|>)+", "$0\n") 
.replaceAll("\\.|\\,|\\[|\\]", "$0\n"); 

し、その結果(SOここではこれを許可しません):期待された何https://pastebin.com/ZaT8d5vehttps://pastebin.com/gNxcgTSP それは括弧の接続と思われます正負の記号は間違っていますが、角かっことドット/カンマの角かっこは問題ありません。私は本当に得ることができない、私のソリューションに何が間違っていますか?

答えて

3

あなたの出力は+-<>の配列がそう-<-<\nない-\n<\nなり\nが続いている、あなたが説明したまさにありません。

私が正しくあなたを理解していれば、あなたはそれの後\nを持っているのいずれかである+-<>同じ文字のシーケンスで分割したいです。その代わりに

s.replaceAll("(\\+|-|<|>)+", "$0\n") 

で、次に該当する場合、あなたは

s.replaceAll("(\\+|-|<|>)\\1*", "$0\n") 

\1を使用できるグループ1(ここでは(\\+|-|<|>))から一致する後方参照であるので、これらの文字のいずれかと一致し、そのオプションの次の繰り返し。

2

あなたはそれがまた-<-->>のように、これらの任意の文字列にマッチするのに対し、

(\\+|-|<|>)+ 

++のように同じ文字の配列のみにマッチだろうと考えているようです。

順番に2つの正規表現は必要ありません。以下の操作を行う必要があります。

s = s.replaceAll("([+<>-])\\1*|[,.\\[\\]]", "$0\n"); 
関連する問題