Hola, estoy intentando ejecutar algunos comandos regexp_replace en la consola de PostgreSQL para convertir enlaces en mi instancia de prueba de Discourse que fue migrada desde un enorme foro de Drupal 7. En casi 2 millones de publicaciones, hay una gran cantidad de enlaces en formato Textile que deben convertirse a Markdown. Esto es lo que estoy intentando usar:
Funciona correctamente en el probador anterior, así como en mi editor de texto; convierte esto:
Cqwertyuioy - Lasgfdf Sddgfdds (Dsajjsa Vsjsjk Osaskgkk Spfs) \"link\":http://www.youtube.com/watch?v=aQjkOmzQ8RT
En esto:
Cqwertyuioy - Lasgfdf Sddgfdds (Dsajjsa Vsjsjk Osaskgkk Spfs) [link](http://www.youtube.com/watch?v=aQjkOmzQ8RT)
Pero en la consola de PostgreSQL de Discourse ejecuto esto:
update posts set raw = regexp_replace(raw, '\"(.*?)\"\\:(http\\S+?(?=\\W+(?:$|\\s))|http\\S+)', E'[\\\\1](\\\\2)', 'g');
Y obtengo esto:
Cqwertyuioy - Lasgfdf Sddgfdds (Dsajjsa Vsjsjk Osaskgkk Spfs) [link](http:)//www.youtube.com/watch?v=aQjkOmzQ8RT
(Disculpas por la anonimización.) Así que la parte importante es:
- Correcto:
[link](http://www.youtube.com/watch?v=aQjkOmzQ8RT) - Incorrecto:
[link](http:)//www.youtube.com/watch?v=aQjkOmzQ8RT
Imagino que tiene algo que ver con la rareza del carácter de escape en el caso de las consultas SQL y/o las funciones especiales de [] y () frente a los literales, pero no puedo descifrarlo. ¿Alguna idea? ¡Gracias!