x <- "abc[[+de.f[-[[g"
v <- c("+", "-", "[", "[[")
## Escaping function
regex.escape <- function(string) {
gsub("([][{}()+*^$|\\\\?])", "\\\\\\1", string)
}
## Sorting by length in the descending order function
sort.by.length.desc <- function (v) v[order( -nchar(v)) ]
## Interleaving function
riffle3 <- function(a, b) {
mlab <- min(length(a), length(b))
seqmlab <- seq(length=mlab)
c(rbind(a[seqmlab], b[seqmlab]), a[-seqmlab], b[-seqmlab])
}
pat <- paste(regex.escape(sort.by.length.desc(v)), collapse="|")
res <- riffle3(regmatches(x, gregexpr(pat, x), invert=TRUE)[[1]], regmatches(x, gregexpr(pat, x))[[1]])
res <- res[res != ""]
res
eCA8LSAiYWJjW1srZGUuZlstW1tnIgp2IDwtIGMoIisiLCAiLSIsICJbIiwgIltbIikKCiMjIEVzY2FwaW5nIGZ1bmN0aW9uCnJlZ2V4LmVzY2FwZSA8LSBmdW5jdGlvbihzdHJpbmcpIHsKICBnc3ViKCIoW11be30oKSsqXiR8XFxcXD9dKSIsICJcXFxcXFwxIiwgc3RyaW5nKQp9CiMjIFNvcnRpbmcgYnkgbGVuZ3RoIGluIHRoZSBkZXNjZW5kaW5nIG9yZGVyIGZ1bmN0aW9uCnNvcnQuYnkubGVuZ3RoLmRlc2MgPC0gZnVuY3Rpb24gKHYpIHZbb3JkZXIoIC1uY2hhcih2KSkgXQojIyBJbnRlcmxlYXZpbmcgZnVuY3Rpb24KcmlmZmxlMyA8LSBmdW5jdGlvbihhLCBiKSB7IAogIG1sYWIgPC0gbWluKGxlbmd0aChhKSwgbGVuZ3RoKGIpKSAKICBzZXFtbGFiIDwtIHNlcShsZW5ndGg9bWxhYikgCiAgYyhyYmluZChhW3NlcW1sYWJdLCBiW3NlcW1sYWJdKSwgYVstc2VxbWxhYl0sIGJbLXNlcW1sYWJdKSAKfSAKcGF0IDwtIHBhc3RlKHJlZ2V4LmVzY2FwZShzb3J0LmJ5Lmxlbmd0aC5kZXNjKHYpKSwgY29sbGFwc2U9InwiKQpyZXMgPC0gcmlmZmxlMyhyZWdtYXRjaGVzKHgsIGdyZWdleHByKHBhdCwgeCksIGludmVydD1UUlVFKVtbMV1dLCByZWdtYXRjaGVzKHgsIGdyZWdleHByKHBhdCwgeCkpW1sxXV0pCnJlcyA8LSByZXNbcmVzICE9ICIiXQpyZXM=