|
元字符 |
字符含义 |
举例说明 |
|
^ |
匹配字符串的开始位置(在[]中使用,此时它表示不接受该字符集合。 |
^a:匹配以a开始的字符串 [^a]:匹配不含a的字符串 |
|
- |
当使用在a-m表示范围; 当使用在第一个字符时表示 连字符串,如[-abc] |
|
|
$ |
匹配字符结束位置 |
‘a$’:匹配以a结束的字符串 |
|
. |
匹配除换行符 n之外的任何单字符。 |
|
|
? |
匹配前面的子表达式零次或一次 |
tr(y(ing)?):可以表示try或者trying |
|
* |
匹配前面的子表达式零次或多次 |
|
|
+ |
匹配前面的子表达式一次或多次 |
|
|
() |
标记一个子表达式的开始和结束位置 |
a(b)*可以匹配 ab,abb,abbb,youabb (c|d)匹配c或d |
|
[] |
标记一个中括号表达式 |
[cd]匹配选择c或d等同于 (c|d)。匹配的是单字符,[^cd]是匹配c,d之外的单字符。 [a-z]表示所有小写字母 |
|
{m,n} |
m= <出现次数 <=n,'{m}'表示出现m次,'{m,}'表示至少出现m次。 |
|
|
| |
表示或者的关系。指明两项之间的一个选择 |
|
字符簇 |
字符含义 |
|
[[:alnum:]] |
字母和数字混合的字符 |
|
[[:alpha:]] |
字母字符 |
|
[[:cntrl:]] |
控制字符 |
|
[[:digit:]] |
数字字符 |
|
[[:graph:]] |
图像字符 |
|
[[:lower:]] |
小写字母字符 |
|
[[:print:]] |
打印字符 |
|
[[:punct:]] |
标点符号字符 |
Oracle支持正则表达式的内置函数
|
名称 |
语法 |
备注 |
|
REGEXP_LIKE |
REGEXP_LIKE (source_string, pattern [, match_parameter] ) |
source_string: 源字符串 Pattern: 正则表达式 match_parameter: 匹配模式(i:不区分大小写;c:区分大小写;n:允许使用可以匹配任意字符串的操作符;m:将x作为一个包含多行的字符串。 |
|
REGEXP_REPLACE |
REGEXP_REPLACE (source_string, pattern [,replace_string] [,position] [,occurtence] [,match_parameter] ) |
replace_string: 用于替换的字符串 Position: 开始搜索的起始位置 occurtence 指定替换第n次出现字符串 其他同上。 |
|
REGEXP_SUBSTR |
REGEXP_SUBSTR (source_string, pattern [,position [,occurrence [,match_parameter]]] ) |
Position: 指定在字符串中准确位置,默认为1 Occurrence: 指定在源字符串匹配过程中相对其他字符串,哪个字符串应该匹配。例如 select regexp_substr('The zip code 80831 is for falcon, co', '[[:alpha:]]{3,}', 1, 3) from dual; 结果选择的是code而非The或zip。 |
|
REGEXP_INSTR |
REGEXP_INSTR (source_string, pattern [,start_position [,occurrence [,return_option [,match_parameter]]]] ) |
start_position: 开始搜索位置 Occurrence: 第n次出现pattern,默认为1 return_option: 0:pattern的起始位置 1:pattern下一个字符起始位置 默认为0 |
|
REGEXP_COUNT |
REGEXP_COUNT (source_string, pattern [[,start_position] [,match_parameter]]) |
11g新增的函数,表示pattern在原字符串中出现的次数 start_position: 开始搜索的位置 |
Oracle支持正则表达式函数举例:
a) REGEXP_SUBSTR
REGEXP_SUBSTR为指定字符串的一部分与正则表达式建立匹配。语法如下:
REGEXP_SUBSTR(source_string,
pattern,
start_position,
occurrence,
match_parameter)
其中source_string是必须的。可以是带引号的字符串或者变量。Pattern是用单引号引用的与正则表达式。Start_position指定了在字符串中的准确位置,默认值为1。Occurrence是一个选项,指定在源字符串匹配过程中相对其他字符串,哪个字符串应该匹配。最后,match_parameter也是一个选项,指定在匹配时是否区分大水写。
示例1:
SQL> select regexp_substr('The zip code 80831 is for falcon, co','[[:digit:]]{5}' ) REGEXP_SUBSTR from dual;
REGEXP_SUBSTR
-------------
80831
示例2:
SQL> select regexp_substr('The zip code 80831 is for falcon, co', '[[:alpha:]]{3,}', 1, 3) REGEXP_SUBSTR from dual;
REGEXP_SUBSTR
-------------
code
示例3
SQL> select regexp_substr('comments or questions - email feedback@plsqlbook.com', '[[:alnum:]](([_\.\-\+]?[[:alnum:]]+)*)@' ||
2 '([[:alnum:]]+)(([\.-]?[[:alnum:]]+)*)\.([[:alpha:]]{2,})') REGEXP_SUBSTR
3 from dual;
REGEXP_SUBSTR
----------------------
feedback@plsqlbook.com
b) REGEXP_INSTR
REGEXP_INSTR返回与正则表达式匹配的字符和字符串的位置。如
SQL> select regexp_instr('The zip code 80831 is for falcon, co', '[[:digit:]]{5}') REGEXP_INSTR from dual;
REGEXP_INSTR
------------
14
c) REGEXP_REPLACE
REGEXP_REPLACE与REPLACE函数类似,提供一种修改与所给正则表达式匹配的字符串的方法。作用包括纠正拼写错误、格式化输入输出的文本。
如电话号码的格式为:719-111-1111。使用REGEX_REPLACER的返回值是:
SQL> select regexp_replace('Reformat the phone number 719-111-1111 ...',
2 '[1]?[-.]?(\(?[[:digit:]]{3}\)?)+[- .]?'
3 || '([[:digit:]]{3})[- .]?([[:digit:]]{4})',
4 ' (\1) \2-\3') regexp_replace
5 from dual;
REGEXP_REPLACE
---------------------------------------------
Reformat the phone number (719) 111-1111 ...
S
d) REGEXP_LIKE
REGEXP_LIKE运算符与LIKE运算符相似,但是功能更强大,因为它支持使用与此正则表达式与文本进行匹配。语法如下:
REGEXP_LIKE(source_string, pattern, match_parameter)
Source_string可以是文字字符串,如果前面例中的字符串,也可以是包含某些字符串的变量或列。Pattern是要进行匹配的正则表达式。Match_parameter用于指定在匹配时是否区分大小写。
SQL> select ename, job
2 from emp
3 where regexp_like(job, '(clerk|analyst)', 'i');
ENAME JOB
---------- ---------
SMITH CLERK
SCOTT ANALYST
ADAMS CLERK
JAMES CLERK
FORD ANALYST
MILLER CLERK
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/25744374/viewspace-734600/ ,如需转载,请注明出处,否则将追究法律责任。