我需要匹配使用oracle sql" REGEXP_LIKE"在一些文本中所有多个电子邮件由空格分隔而不是分号。 我成功使用了以下正则表达式
\@.*(\ )+.*\@.*
这足以满足我的需求,直到一个聪明的家伙开始以这种格式推出多个电子邮件
email@domain ; email@domain
我之前的正则表达式失败了。 我想要的是匹配
email@domain email@domain
(电子邮件由多个空格隔开)
但丢弃了:
email@domain ; email@domain
(电子邮件由空格分隔,但以分号分隔)
有没有一种简单的方法来实现这一目标?
提前致谢!
答案 0 :(得分:1)
从原始表达式中的.*
开始,我发现您对于指定电子邮件地址中的字符是否有效并不太感兴趣。所以我建议这样的事情:
^([^[:space:]@;]+@[^[:space:]@;]+(\s*))+$
样本使用
SELECT * FROM mytable WHERE REGEXP_LIKE(mycolumn, '^([^[:space:]@;]+@[^[:space:]@;]+(\s*))+$', 'c');
正则表达式解释
^([^[:space:]@;]+@[^[:space:]@;]+(\s*))+$
^
([^[:space:]@;]+@[^[:space:]@;]+(\s*))+
+
[^[:space:]@;]+
+
[:space:]
@;
@
[^[:space:]@;]+
+
[:space:]
@;
(\s*)
\s*
*
$
答案 1 :(得分:0)
我猜你可以替换&#34 ;;"在文本中有空白量,然后使用您已有的方法分离电子邮件。如果您不使用";"文本中的任何其他位置。 (你不想替换那些!)你使用什么编程语言?在使用"某些文字"?时,你是指字符串吗?