《oracle正则表达式》摘抄+自理
select * from t_test_regexp;
A B
1 AAA
2 bbb
3 !!!
4 !!!
5 吴雁渡
6 12345
7 123AAbb存储@#%!!@#445BBC
1.REGEXP_LIKE:类似于 LIKE 运算符,但执行正则表达式匹配而不是简单的模式匹配
select a.*,a.rowid from t_test_regexp a
where regexp_like(a.b,'\d') (12345,123AAbb存储@#%!!@#445BBC)//
常用例子:查询以某些字符串开头的数据
select * from scott.emp a
where REGEXP_LIKE(A.job,'^(CL|PRE)') --查询job字段中值以CL或PRE开头的数据
PS: 对用法不熟的话这里容易出个错误,把^(CL|PRE)写成了^[CL|PRE],就是括号用错,后者匹配的是‘字符’不是’字符串‘,即匹配的是C,L,|,P,R,E这几个字符开头的记录
2.REGEXP_INSTR:在给定字符串中搜索某个正则表达式模式,并返回匹配项的位置。
select a.b,REGEXP_INSTR(a.b,'\d') from t_test_regexp a;(0,0,0,0,0,1,1)
select a.b,REGEXP_INSTR(a.b,'\d',7) from t_test_regexp a;(0,0,0,0,0,0,17)
3.REGEXP_REPLACE:搜索某个正则表达式模式并使用替换字符串替换它
select a.b,REGEXP_REPLACE(a.b,'\d','靠') from t_test_regexp a
where a.a=7 (靠靠靠AAbb存储@#%!!@#靠靠靠BBC)
4.REGEXP_SUBSTR:在给定字符串中搜索某个正则表达式模式并返回匹配的子字符串
select a.b,REGEXP_SUBSTR(a.b,'\d{2}',1,2) from t_test_regexp a
where a.a=7 (44)
;
5.regexp_count:统计字符串中符合指定模式的出现次数
SELECT regexp_count('as3ld5fg7jas','\d') FROM dual --出现数字的次数
----------------------------------字符释义-------------------------------------------
^:匹配一个字符串的开始。如果与“m” 的match_parameter一起使用,则匹配表达式中任何位置的行的开头。
$:匹配字符串的结尾。如果与“m” 的match_parameter一起使用,则匹配表达式中任何位置的行的末尾。
*:匹配零个或多个。
+:匹配一个或多个出现。
?:匹配零次或一次出现。
. :匹配任何字符,除了空。
|:用“OR”来指定多个选项。
[]:用于指定一个匹配列表,您尝试匹配列表中的任何一个字符。
[^]:用于指定一个不匹配的列表,您尝试匹配除列表中的字符以外的任何字符。
():用于将表达式分组为一个子表达式。
{M}:匹配m次。
{M,}:至少匹配m次。
{M,N}:至少匹配m次,但不多于n次。
\ n:n是1到9之间的数字。在遇到\ n之前匹配在()内找到的第n个子表达式。
[..]:匹配一个可以多于一个字符的整理元素。
[:]:匹配字符类。
[==]:匹配等价类。
\ d:匹配一个数字字符。
\ D:匹配一个非数字字符。
\ w:匹配包括下划线的任何单词字符。
\ W:匹配任何非单词字符。
\ s:匹配任何空白字符,包括空格,制表符,换页符等等。
\ S:匹配任何非空白字符。
\A:在换行符之前匹配字符串的开头或匹配字符串的末尾。
\Z:匹配字符串的末尾。
*?:匹配前面的模式零次或多次发生。
+?:匹配前面的模式一个或多个事件。
??:匹配前面的模式零次或一次出现。
{N}?:匹配前面的模式n次。
{N,}?:匹配前面的模式至少n次。
{N,M}?:匹配前面的模式至少n次,但不超过m次。