【发布时间】:2015-08-08 17:37:41
【问题描述】:
我目前正在开发一个 ruby 程序来计算术语。它工作得很好,除了一件事:括号。我需要过滤内容,或者至少将内容放入数组中,但我已经尝试了一个小时来提出解决方案。这是我的代码:
splitted = term.split(/\(+|\)+/)
我需要一个数组而不是括号,例如:
"1-(2+3)" #=>["1", "-", ["2", "+", "3"]]
我已经试过了:
/(\((?<=.*)\))/
但它返回了:
Invalid pattern in look-behind.
有人可以帮我解决这个问题吗?
更新
我忘了说,我的程序会拆分术语,我只需要括号的内容是一个数组。
【问题讨论】:
-
我发现 stringscanner 更适合这类任务。
-
无效消息似乎是因为在大多数引擎(Dot-Net 除外)中,lookbehinds 不能具有可变长度。另一件事是,如果您尝试独立解析
(2+3),除非Ruby 支持递归,否则您不能这样做。而且,我不知道是不是这样。另一种方法是自己解析它,逐个字符地跟踪堆栈的嵌套。 -
这将是一个合适的嵌套示例:
(5-(3*2(4+1)-9)+7)*4