我想创建一个能够获取brainfuck代码中的每个循环的正则表达式。
假设给出了这段代码:
++++[>+[>,++.]<<-]++[>,.<-]
我想获取这三个循环(实际上只获取第一个循环就足够了):
[>+[>,++.]<<-]
[>,++.]
[,.<-]
我对正则表达式的了解很薄弱,所以除了基础知识我无能为力。我想到的是这样的表达:
\[[-+><.,\[\]]*]
\[ - Match the first (opening) bracket
[-+><.,\[\]]* - followed by a number of brainfuck operators
] - followed by a closing bracket
然而,这匹配(显然)第一个开头和最后一个右括号之间的所有内容:
[>+[>,++.]<<-]++[>,.<-]
在匹配最后一个右括号之前,它可能需要测试循环内相同数量的左括号和右括号 - 如果这有任何意义。
也许环顾四周(我需要在 javascript 中使用它,所以我只能使用lookaheads)是正确的方法,但我无法弄清楚它应该如何完成。