Salut, j’essaie d’exécuter des commandes regexp_replace dans la console pg pour convertir des liens dans mon instance Discourse de test qui a été migrée depuis un énorme forum Drupal 7. Sur près de 2 millions de messages, il y a un tas de liens au format Textile qui doivent être convertis en Markdown. Voici ce que j’essaie d’utiliser :
Cela fonctionne correctement dans le testeur ci-dessus ainsi que dans mon éditeur de texte ; cela transforme ceci :
Cqwertyuioy - Lasgfdf Sddgfdds (Dsajjsa Vsjsjk Osaskgkk Spfs) "link":http://www.youtube.com/watch?v=aQjkOmzQ8RT
En ceci :
Cqwertyuioy - Lasgfdf Sddgfdds (Dsajjsa Vsjsjk Osaskgkk Spfs) [link](http://www.youtube.com/watch?v=aQjkOmzQ8RT)
Mais dans la console pg de Discourse, j’exécute ceci :
update posts set raw = regexp_replace(raw, '\"(.*?)\"\\:(http\\S+?(?=\\W+(?:$|\\s))|http\\S+)', E'[\\\\1](\\\\2)', 'g');
Et j’obtiens ceci :
Cqwertyuioy - Lasgfdf Sddgfdds (Dsajjsa Vsjsjk Osaskgkk Spfs) [link](http:)//www.youtube.com/watch?v=aQjkOmzQ8RT
(Désolé pour l’anonymisation.) Donc la partie importante est :
- Correct :
[link](http://www.youtube.com/watch?v=aQjkOmzQ8RT) - Incorrect :
[link](http:)//www.youtube.com/watch?v=aQjkOmzQ8RT
J’imagine que cela a quelque chose à voir avec la bizarrerie du caractère d’échappement dans le cas des requêtes SQL et/ou les fonctions spéciales de [] et () par rapport aux littéraux, mais je n’arrive pas à le comprendre. Des idées ? Merci !