func tokenize(string, sep, esc) { var fields = string.split( Regex(esc.escape + '.(*SKIP)(*FAIL)|' + sep.escape, 's'), -1 ) fields.map{.gsub(Regex(esc.escape + '(.)'), {|s1| s1 }) } } tokenize("one^|uno||three^^^^|four^^^|^cuatro|", '|', '^').each { |str| say str.dump }