¿Extraer coincidencias de grupos de captura de expresiones regulares? (o: ¿dónde está gregexec?)

Dada una expresión regular que contienegrupos de captura (paréntesis) y una cadena, ¿cómo puedo obtenertodos las subcadenas que coinciden con los grupos de captura, es decir, las subcadenas usualmente referenciadas por "\ 1", "\ 2"?

Ejemplo: considere un regex que captura dígitos precedidos por "xy":

s <- "xy1234wz98xy567"

r <- "xy(\\d+)"

Resultado deseado:

[1] "1234" "567" 

Primer intento:gregexpr:

regmatches(s,gregexpr(r,s))
#[[1]]
#[1] "xy1234" "xy567" 

No es lo que quiero porque devuelve las subcadenas que coinciden con todo el patrón.

Segundo intento:regexec:

regmatches(s,regexec("xy(\\d+)",s))
#[[1]]
#[1] "xy1234" "1234" 

No es lo que quiero porque vuelve.solamente la primera aparición de una coincidencia para todo el patrón y el grupo de captura.

Si hubiera ungregexec función, extendiendoregexec comogregexpr se extienderegexpr, mi problema estaría resuelto.

Entonces, la pregunta es: cómo recuperar todas las subcadenas (o índices que se pueden pasar aregmatches como en los ejemplos anteriores) ¿coinciden los grupos de captura en una expresión regular arbitraria?

Nota: el patrón parar dado lo anterior es solo un ejemplo tonto, debe seguir siendo arbitrario.

Respuestas a la pregunta(3)

Su respuesta a la pregunta