Ciao, sto cercando di eseguire alcuni comandi regexp_replace nella console pg per convertire i link nella mia istanza di test Discourse che è stata migrata da un enorme forum Drupal 7. Su quasi 2 milioni di post ci sono molti link in formato Textile che devono essere convertiti in Markdown. Questo è quello che sto cercando di usare:
Funziona correttamente nel tester sopra, così come nel mio editor di testo; trasforma questo:
Cqwertyuioy - Lasgfdf Sddgfdds (Dsajjsa Vsjsjk Osaskgkk Spfs) \"link\":http://www.youtube.com/watch?v=aQjkOmzQ8RT
In questo:
Cqwertyuioy - Lasgfdf Sddgfdds (Dsajjsa Vsjsjk Osaskgkk Spfs) [link](http://www.youtube.com/watch?v=aQjkOmzQ8RT)
Ma nella console pg di Discourse eseguo questo:
update posts set raw = regexp_replace(raw, '\"(.*?)\"\\:(http\\S+?(?=\\W+(?:$|\\s))|http\\S+)', E'[\\\\1](\\\\2)', 'g');
E ottengo questo:
Cqwertyuioy - Lasgfdf Sddgfdds (Dsajjsa Vsjsjk Osaskgkk Spfs) [link](http:)//www.youtube.com/watch?v=aQjkOmzQ8RT
(Mi scuso per l’anonimizzazione.) Quindi la parte importante è:
- Corretto:
[link](http://www.youtube.com/watch?v=aQjkOmzQ8RT) - Sbagliato:
[link](http:)//www.youtube.com/watch?v=aQjkOmzQ8RT
Immagino che abbia a che fare con la stranezza del carattere di escape nel caso di query SQL e/o le funzioni speciali di [] e () rispetto ai letterali, ma non riesco a capirlo. Qualche idea? Grazie!