¿Cómo hacer los reemplazos de cadena de expresiones regulares en C puro?

He examinado las funciones de expresiones regulares en la biblioteca de expresiones regulares de POSIX y la biblioteca PCRE, pero ambas no parecen tener una función de reemplazo de cadena. No quiero usar C ++, y sería mejor si no necesito vincular otra biblioteca (pero puedo si tengo que hacerlo). ¿Necesito hacer manualmente la cadena de reemplazo? Si es así, ¿cómo puedo usar los grupos de captura?

regex.h no proporciona soporte nativo para el reemplazo de cadenas, sin embargo, proporciona subexpresiones / grupos de captura que lo hacen mucho más fácil. Asumiré que está familiarizado con las comstackciones de expresiones regulares y saltar a la ejecución de expresiones regulares y las subexpresiones.

regexec () se define como sigue en regex.h (/ usr / include /):

extern int regexec (const regex_t *__restrict __preg, const char *__restrict __string, size_t __nmatch, regmatch_t __pmatch[__restrict_arr], int __eflags); 

Los argumentos primero, segundo y final son la expresión regular, la cadena a ejecutar y los indicadores de ejecución, respectivamente. Los argumentos tercero y cuarto se utilizan para especificar una matriz de regmatch_t. Un regmatch_t consta de dos campos: rm_so y rm_eo, que son los índices, o compensaciones, del principio y el final del área coincidente, respectivamente. Estos índices se pueden usar junto con memcpy () , memset () y memmove () de string.h para realizar el reemplazo de cadenas.

Haré un pequeño ejemplo y lo publicaré más tarde.

Buena suerte, y espero que esto haya ayudado.

La biblioteca PCRE en sí no proporciona una función de reemplazo, pero hay una función de envoltorio disponible en la página de descargas de PCRE que acepta el estilo de perl =~ s/pattern/replace/ y luego usa las funciones nativas de PCRE para hacer un reemplazo / reemplazo de tú. Vaya a http://www.pcre.org/ y luego haga clic en el enlace de descarga: ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/ , luego en el directorio Contrib . El paquete / proyecto que desea es: pcrs-0.0.3-src.tar.gz .

Tenga en cuenta que no he usado esto por mi cuenta, por lo que no puedo dar testimonio de cómo funciona. Sin embargo, es una pieza de código bastante pequeña y simple, por lo que puede servir muy bien a su propósito.