Olá, estou tentando executar alguns comandos regexp_replace no console pg para converter links na minha instância de teste do Discourse que foi migrada de um enorme fórum Drupal 7. Em quase 2 milhões de posts, há um monte de links em formato Textile que precisam ser convertidos para Markdown. É isso que estou tentando usar:
Funciona corretamente no testador acima, bem como no meu editor de texto; ele transforma isto:
Cqwertyuioy - Lasgfdf Sddgfdds (Dsajjsa Vsjsjk Osaskgkk Spfs) \"link\":http://www.youtube.com/watch?v=aQjkOmzQ8RT
Nisto:
Cqwertyuioy - Lasgfdf Sddgfdds (Dsajjsa Vsjsjk Osaskgkk Spfs) [link](http://www.youtube.com/watch?v=aQjkOmzQ8RT)
Mas no console pg do Discourse eu executo isto:
update posts set raw = regexp_replace(raw, '\"(.*?)\"\\:(http\\S+?(?=\\W+(?:$|\\s))|http\\S+)', E'[\\\\1](\\\\2)', 'g');
E acabo com isto:
Cqwertyuioy - Lasgfdf Sddgfdds (Dsajjsa Vsjsjk Osaskgkk Spfs) [link](http:)//www.youtube.com/watch?v=aQjkOmzQ8RT
(Desculpe pela anonimização.) Então a parte importante é:
- Correto:
[link](http://www.youtube.com/watch?v=aQjkOmzQ8RT) - Errado:
[link](http:)//www.youtube.com/watch?v=aQjkOmzQ8RT
Imagino que tenha algo a ver com a estranheza do caractere de escape no caso de consultas SQL e/ou as funções especiais de [] e () versus literais, mas não consigo descobrir. Alguma ideia? Obrigado!