oracle从10g开始支持的正则表达式确实展现了其威力。从10g到现在,已经过去这么多年了,居然在网上找不到合适的标准语句,还是自己录下吧。
下表所列的都是经过测试的正确语法:
(原文链接 http://ddbiz.com/?p=205)
1. 匹配 邮件地址 email:
[0-9a-zA-Z_]+([-.][0-9a-zA-Z_]+)*@[0-9a-zA-Z_]+([-.][0-9a-zA-Z_]+)?/.[0-9a-zA-Z_]+([-.][0-9a-zA-Z_]+)*
之所以用 [0-9a-zA-Z_] 而不用 /w, 是因为 /w 在SQL中也匹配了中文字符,比如如下语句中:
SQL>select regexp_substr('钱可通神suvi@askac.net主页', '[0-9a-zA-Z_]+([-.][0-9a-zA-Z_]+)*@[0-9a-zA-Z_]+([-.][0-9a-zA-Z_]+)?/.[0-9a-zA-Z_]+([-.][0-9a-zA-Z_]+)*') email
from dual;
EMAIL
------------------------------------
suvi@askac.net
而用 /w 则包含了汉字
SQL> select regexp_substr('钱可通神suvi@askac.net主页', '/w+([-.]/w+)*@/w+([-.]/w+)?/./w+([-.]/w+)*') email
from dual;
EMAIL
------------------------------------
钱可通神suvi@askac.net主页
2. 陆续更新