Не знаю, как это сделать в базе, но вот пакет для ваших нужд:
library(stringr)
str_match_all(s, r)
#[[1]]
# [,1] [,2]
#[1,] "xy1234" "1234"
#[2,] "xy567" "567"
Многие функции stringr
также имеют параллели в базе R, поэтому вы также можете достичь этого, не используя stringr
.
Например, вот упрощенная версия того, как это работает, используя базу R:
sapply(regmatches(s,gregexpr(r,s))[[1]], function(m) regmatches(m,regexec(r,m)))