您好,我正在尝试在 pg 控制台中运行一些 regexp_replace 命令,以转换我的测试 Discourse 实例中的链接,该实例是从一个巨大的 Drupal 7 论坛迁移过来的。在近 200 万篇文章中,有许多 Textile 格式的链接需要转换为 Markdown。我尝试使用以下方法:
它在上面的测试器以及我的文本编辑器中都能正常工作;它将这个:
Cqwertyuioy - Lasgfdf Sddgfdds (Dsajjsa Vsjsjk Osaskgkk Spfs) \"link\":http://www.youtube.com/watch?v=aQjkOmzQ8RT
转换为这个:
Cqwertyuioy - Lasgfdf Sddgfdds (Dsajjsa Vsjsjk Osaskgkk Spfs) [link](http://www.youtube.com/watch?v=aQjkOmzQ8RT)
但是,在 Discourse 的 pg 控制台中,我运行了这个:
update posts set raw = regexp_replace(raw, '\"(.*?)\"\\:(http\\S+?(?=\\W+(?:$|\\s))|http\\S+)', E'[\\\\1](\\\\2)', 'g');
结果却是这样的:
Cqwertyuioy - Lasgfdf Sddgfdds (Dsajjsa Vsjsjk Osaskgkk Spfs) [link](http:)//www.youtube.com/watch?v=aQjkOmzQ8RT
(抱歉进行了匿名化处理。)所以重要的部分是:
- 正确:
[link](http://www.youtube.com/watch?v=aQjkOmzQ8RT) - 错误:
[link](http:)//www.youtube.com/watch?v=aQjkOmzQ8RT
我想这可能与 SQL 查询中的转义字符怪异性以及/或 [] 和 () 的特殊函数与字面量的关系有关,但我无法弄清楚。有什么想法吗?谢谢!