【问题标题】:Regular expression removing a line from multiline text正则表达式从多行文本中删除一行
【发布时间】:2015-10-30 12:06:18
【问题描述】:

我有一个正则表达式

select regexp_replace('123@gmail.com - work new address',
                      [A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}, '')
  from dual;

我用来匹配电子邮件地址。一些字符串存储为多行

我想匹配第一行的电子邮件地址并删除所有文本,包括 - 工作,但不是回车后的第二行。

【问题讨论】:

  • 正则表达式 ^.*?([A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}).* 替换为 $1
  • 我需要把 1 美元放在哪里?
  • 参见文档中的 regex_replace func..
  • 我检查了文档,没有说明在哪里放置反向引用

标签: regex oracle plsql


【解决方案1】:

首先,您必须将回车替换为 # 之类的字符。 例如:

REPLACE(yourstring,CHR(10),'#')

使用类似“123@gmail.com - work#new@address”的结果字符串后,您可以执行以下操作:

select regexp_substr(regexp_substr('123@gmail.com -     work#new@address',
'[^#]+', 1, level),'[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+.[A-Za-z]  {2,4}') 
from dual
connect by regexp_substr('123@gmail.com - work#new@address', 
                         '[^#]+',1,   level) is not null;


REGEXP_SUBSTR(REGEXP_SUBSTR('123
--------------------------------
123@gmail.com
new@address

【讨论】:

  • 您应该将您的正则表达式更改为[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}(在字符类之外转义点)。否则,123@gmail.com work 也会匹配。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-21
  • 1970-01-01
相关资源
最近更新 更多