regex.escape <- function(string) {
gsub("([][{}()+*^${|\\\\?])", "\\\\\\1", string)
}
sort.by.length.desc <- function (v) v[order( -nchar(v)) ]
s <- "artist picasso \"picasso (painting)\" france zoo"
keys <- c(t(read.table(text=s, header=FALSE)))
keys <- sort.by.length.desc(keys)
pattern = paste(regex.escape(keys), collapse="|")
## Test
cat(pattern, sep="\n")
txt <- "The artist was born in france and named picasso picasso (painting)"
length(unlist(gregexpr(pattern, txt)))
cmVnZXguZXNjYXBlIDwtIGZ1bmN0aW9uKHN0cmluZykgewogIGdzdWIoIihbXVt7fSgpKypeJHt8XFxcXD9dKSIsICJcXFxcXFwxIiwgc3RyaW5nKQp9Cgpzb3J0LmJ5Lmxlbmd0aC5kZXNjIDwtIGZ1bmN0aW9uICh2KSB2W29yZGVyKCAtbmNoYXIodikpIF0gCgpzIDwtICJhcnRpc3QgcGljYXNzbyBcInBpY2Fzc28gKHBhaW50aW5nKVwiIGZyYW5jZSB6b28iCmtleXMgPC0gYyh0KHJlYWQudGFibGUodGV4dD1zLCBoZWFkZXI9RkFMU0UpKSkKa2V5cyA8LSBzb3J0LmJ5Lmxlbmd0aC5kZXNjKGtleXMpCnBhdHRlcm4gPSBwYXN0ZShyZWdleC5lc2NhcGUoa2V5cyksIGNvbGxhcHNlPSJ8IikKIyMgVGVzdApjYXQocGF0dGVybiwgc2VwPSJcbiIpCnR4dCA8LSAiVGhlIGFydGlzdCB3YXMgYm9ybiBpbiBmcmFuY2UgYW5kIG5hbWVkIHBpY2Fzc28gcGljYXNzbyAocGFpbnRpbmcpIgpsZW5ndGgodW5saXN0KGdyZWdleHByKHBhdHRlcm4sIHR4dCkpKQ==