【问题标题】:Multiple Replacements with Oracle REGEXP_REPLACE使用 Oracle REGEXP_REPLACE 进行多次替换
【发布时间】:2014-03-25 16:07:58
【问题描述】:

好吧,帝国特工已经获得了对所有银河邮件服务器的访问权限,并在每个服务器上都为达斯·瓦达创建了一个邮件帐户...

Republic 在 Oracle Column 中维护了一个主分发列表,如下所示:

~To,Chewie,ChewBacca@wookie.net~;~Cc,Han Solo,Millenium@Falcon.com~;~Cc,Luke Skywalker,Luke@IamYourFather.co.uk~

我们的帝国特工需要帮助,使用 Oracle REGEXP_REPLACE 将所有电子邮件帐户名称部分替换为 Darth Vadar 帐户 Vadar@... 所以最终结果将是:

~To,Chewie,Vadar@wookie.net~;~Cc,Han Solo,Vadar@Falcon.com~;~Cc,Luke Skywalker,Vadar@IamYourFather.co.uk~

这可以作为单个语句完成吗? 你会认为使用黑暗力量会更容易。

【问题讨论】:

    标签: sql regex oracle


    【解决方案1】:

    在某些情况下可能太简单了,但对于您的示例,这可行:

    regexp_replace(value, '[[:alnum:]\.]*@', 'Vadar@')
    

    例如:

    select regexp_replace('~To,Chewie,ChewBacca@wookie.net~;~Cc,Han Solo,Millenium@Falcon.com~;~Cc,Luke Skywalker,Luke@IamYourFather.co.uk~',
      '[[:alnum:].%_+-]*@', 'Vadar@')
    from dual;
    
    
    ~To,Chewie,Vadar@wookie.net~;~Cc,Han Solo,Vadar@Falcon.com~;~Cc,Luke Skywalker,Vadar@IamYourFather.co.uk~
    

    SQL Fiddle 带有破折号和句点示例。

    【讨论】:

    • 如果我们将欧比旺加入其中,我们就会遇到麻烦。 ~To,Chewie,ChewBacca@wookie.net~;~Cc,Han Solo,Millenium@Falcon.com~;~Cc,Luke Skywalker,Luke@IamYourFather.co.uk~;~Cc,Obi-Wan Kenobi,Obi-Wan@JediCouncil.au~
    • @CapitalBoo - 说这可能太简单了。我已经允许使用句点,但现在扩展了模式以包含其他有效字符。这可能仍然不是 RFC 5322 允许的所有内容,并且仅涵盖英语,但不确定您要处理的范围。
    猜你喜欢
    • 2017-02-26
    • 2018-08-14
    • 1970-01-01
    • 2015-12-07
    • 2015-03-12
    • 1970-01-01
    • 2018-08-03
    • 2018-08-05
    • 2012-01-16
    相关资源
    最近更新 更多