Я предполагаю, что проблема состоит в разделении на периоды, которые не находятся в соответствующих скобках.
Вот решение без регулярных выражений, которое работает с любым количеством вложенных скобок.Я предположил, что все скобки совпадают, но проверить это несложно.
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"]