使用Oracle REGEXP_REPLACE进行多次替换

时间:2014-03-24 21:29:24

标签: sql regex oracle

好的,所以Imperial Agent已经获得了所有Galactic邮件服务器的访问权限,并为每个邮件服务器创建了Darth Vadar的邮件帐户......

共和国的Oracle专栏中维护了一个主分发列表,如下所示:

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

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

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

这可以作为单一声明完成吗? 你会认为使用黑暗力量比这更容易。

1 个答案:

答案 0 :(得分:1)

对于某些情况,可能过于简单,但对于您的示例,这可行:

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

e.g:

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使用破折号和句点示例。