【问题标题】:Replacing a formatted string in MySql替换MySql中的格式化字符串
【发布时间】:2011-03-04 20:50:22
【问题描述】:

我正在尝试将 MySql 数据库中旧 BB 标记标记的所有实例替换为更新的、略有不同的标记标记。

旧格式是这样的……

[youtube:********]{Video ID}[/youtube:********]

我想用这个代替...

[youtube:********]http://www.youtube.com/watch?v={Video ID}[/youtube:********]

其中 * 是字母数字字符的随机字符串。所以很遗憾,REPLACE(feild, '[youtube:********]', '[youtube:********]http://www.youtube.com?watch?v= 不会这样做。

我使用 REPLACE()INSTR() 所做的所有笨拙尝试都导致了像 [b]Bold Text[/b]http://www.youtube.com/watch?v= 这样的讨厌的事情

有没有办法在 MySql 中进行这种模式替换?可能使用正则表达式?

谢谢。

【问题讨论】:

    标签: mysql regex string phpbb


    【解决方案1】:

    这是你试过的吗?

    UPDATE table SET Field = REPLACE(Field,']{',']http://www.youtube.com/watch?v={')
    

    这将取决于是否没有任何其他出现 ']{'

    编辑:您可能还想尝试:

    UPDATE table SET Field = LEFT(Field,#) + 'http://www.youtube.com/watch?v='+ 
    RIGHT(Field,(Char_Length(Field)-#);
    

    只需检查 MYSQl 文档的语法。 Char_LNEGTH() 可能需要为 LENGTH() - 我确定你明白了

    【讨论】:

    • 我尝试了一个更详细的版本,基本上有某种WHERE INSTR(field, ']') > INSTR(field, '[youtube:') and INSTR(field, ']') < INSTR(field, '[\youtube:)。不幸的是,它没有工作。
    • 随机字符个数是定长的吗?
    • 是的。如果有帮助,{Video ID} 也是如此。这是一个 YouTube 视频 ID,例如:'NOgU4aJtXF8'。事后看来,我应该以与 * 相同的方式表示它。
    • 您的建议启发了我制作以下内容...UPDATE phpbb_posts SET post_text = CONCAT(LEFT(post_text, INSTR(post_text, '[youtube:') + LENGTH('[youtube:--------')), 'http://www.youtube.com/watch?v=', RIGHT(post_text, LENGTH(post_text)+12 - INSTR(post_text, '[/youtube:'))) ...效果很好。非常感谢:)。
    猜你喜欢
    • 2017-06-02
    • 2015-11-27
    • 2015-01-21
    • 2015-11-14
    • 1970-01-01
    • 2014-07-29
    • 2012-10-31
    • 1970-01-01
    • 2011-08-22
    相关资源
    最近更新 更多