本帖最后由 余烬之中 于 2014-6-20 22:22 编辑
taroxd 发表于 2014-6-20 21:14
很感谢你的方法……让我参考一下……不过我要的还有替换功能啊233
而且用你的方法,我无法判断那些属于“ ...
FUCK 我居然没有想到
->{puts '}'}
这个用我的方法会匹配错误
不对 我被绕进去了
我这个方法的目的只是分组匹配
在这个范围内使用毫无问题
顺便 楼上正则式的链接 http://rubular.com/r/KB9DX2hV4U
==========================
改了一下result的数据结构 现在是二维数组了 第一个表示字符 第二个表示深度 以最外层没有括号的为0深度
def mBrackets str, brackets = {'(' => ')', '[' => ']', '{' => '}', '<' => '>'} matched = [] result = [["", 0]] valid = [0] str.clone.each_char do |c| valid.each{|v| result[v][0].concat(c)} if brackets.keys.include?(c) matched.push(c) valid.push(result.size) result.push(["", valid.size - 1]) elsif brackets.values.include?(c) if brackets[matched[-1]] == c result[valid[-1]][0].chop! valid.pop matched.pop else raise ArgumentError, "False Matching!" end end end result end
def mBrackets str, brackets = {'(' => ')', '[' => ']', '{' => '}', '<' => '>'}
matched = []
result = [["", 0]]
valid = [0]
str.clone.each_char do |c|
valid.each{|v| result[v][0].concat(c)}
if brackets.keys.include?(c)
matched.push(c)
valid.push(result.size)
result.push(["", valid.size - 1])
elsif brackets.values.include?(c)
if brackets[matched[-1]] == c
result[valid[-1]][0].chop!
valid.pop
matched.pop
else
raise ArgumentError, "False Matching!"
end
end
end
result
end
|