Hallo, ich versuche, einige regexp_replace-Befehle in der pg-Konsole auszuführen, um Links in meiner Testinstanz von Discourse zu konvertieren, die von einem riesigen Drupal 7 Forum migriert wurden. In fast 2 Millionen Beiträgen gibt es eine Reihe von Links im Textile-Format, die in Markdown konvertiert werden müssen. Dies ist, was ich zu verwenden versuche:
Es funktioniert korrekt im obigen Tester sowie in meinem Texteditor; es wandelt dies um:
Cqwertyuioy - Lasgfdf Sddgfdds (Dsajjsa Vsjsjk Osaskgkk Spfs) \"link\":http://www.youtube.com/watch?v=aQjkOmzQ8RT
in dies:
Cqwertyuioy - Lasgfdf Sddgfdds (Dsajjsa Vsjsjk Osaskgkk Spfs) [link](http://www.youtube.com/watch?v=aQjkOmzQ8RT)
Aber in der Discourse pg-Konsole führe ich dies aus:
update posts set raw = regexp_replace(raw, '\"(.*?)\"\\:(http\\S+?(?=\\W+(?:$|\\s))|http\\S+)', E'[\\\\1](\\\\2)', 'g');
Und ich lande mit diesem:
Cqwertyuioy - Lasgfdf Sddgfdds (Dsajjsa Vsjsjk Osaskgkk Spfs) [link](http:)//www.youtube.com/watch?v=aQjkOmzQ8RT
(Entschuldigung für die Anonymisierung.) Der wichtige Teil ist also:
- Korrekt:
[link](http://www.youtube.com/watch?v=aQjkOmzQ8RT) - Falsch:
[link](http:)//www.youtube.com/watch?v=aQjkOmzQ8RT
Ich stelle mir vor, dass es etwas mit der Seltsamkeit des Escape-Zeichens im Falle von SQL-Abfragen und/oder den Sonderfunktionen von [] und () im Vergleich zu Literalen zu tun hat, aber ich kann es nicht herausfinden. Irgendwelche Ideen? Danke!