我有一个字符串:
s='articles[zone.id=1].comments[user.status=active].user'
希望分裂(通过split(some_regex_here)
)。除了括号内的子串之外的每个时期都需要进行拆分。
预期产量:
["articles[zone.id=1]", "comments[user.status=active]", "user"]
我该怎么做?或者除了split()
之外还有别的什么,我应该看看?
试试这个,
s.split(/\.(?![^\[]*\])/)
我得到了这个结果,
2.3.2 :061 > s.split(/\.(?![^\[]*\])/)
=> ["articles[zone.id=1]", "comments[user.status=active]", "user"]
你也可以在这里测试一下:https://rubular.com/r/LaxEFQZJ0ygA3j
我假设问题是拆分不在匹配括号内的句点。
这是一个非正则表达式解决方案,可以使用任意数量的嵌套括号。我假设括号都是匹配的,但检查它并不困难。
def split_it(s)
left_brackets = 0
s.each_char.with_object(['']) do |c,a|
if c == '.' && left_brackets.zero?
a << '' unless a.last.empty?
else
case c
when ']' then left_brackets -= 1
when '[' then left_brackets += 1
end
a.last << c
end
end.tap { |a| a.pop if a.last.empty? }
end
split_it '.articles[zone.id=[user.loc=1]].comments[user.status=active].user'
#=> ["articles[zone.id=[user.loc=1]]", "comments[user.status=active]", "user"]