前提
首先是关于Oracle中正则表达式的函数,有如下的这些函数可用
函数名 | 使用 |
---|---|
REGEXP_LIKE | 类似于 LIKE 运算符,但执行正则表达式匹配而不是简单的模式匹配 |
REGEXP_INSTR | 在给定字符串中搜索某个正则表达式模式,并返回匹配项的位置。 |
REGEXP_REPLACE | 搜索某个正则表达式模式并使用替换字符串替换它 |
REGEXP_SUBSTR | 在给定字符串中搜索某个正则表达式模式并返回匹配的子字符串 |
使用
- 基本搜索
regexp_like
-- 搜索符合条件的数据
SELECT y.emaillist FROM ct_maillist y WHERE regexp_like(y.emaillist,'yi\d?@\w+\.com$');
regexp_substr
--将符合条件的字符串截取出来
SELECT y.emaillist,regexp_substr(y.emaillist,'zhenglan') ttt FROM ct_maillist y;
regexp_instr
--查询字符串出现的位置
SELECT y.emaillist,regexp_instr(y.emaillist,'@') strindex FROM ct_maillist y;
regexp_replace
--替换符合正则表达式的字符串
SELECT y.emaillist,regexp_replace(y.emaillist,'zengyi2','doubly_yi') newemail FROM ct_maillist y WHERE regexp_like(y.emaillist,'zengyi');
- 使用正则表达式校验约束
--校验字段中是否有@
ALTER TABLE customers ADD CONSTRAINT cust_email_addr CHECK(REGEXP_LIKE(cust_email,'@'))NOVALIDATE ;