常见函数:
REGEXP_LIKE
LIKE语句的正则表达式,
REGEXP_REPLACE
用执行字符串替换源文本中与正则表达式匹配的字符串,
REGEXP_INSTR返回源字符串中首次匹配正则表达式的起始位置,
REGEXP_SUBSTR
返回源串中匹配正则表达式的子字符串
正则表达式由标准的元字符(metacharacters)所构成:
字符
[[:alpha:]]任何字母。[A-Za-z]
[[:digit:]]任何数字。[0-9]
[[:alnum:]]任何字母和数字。[A-Za-z0-9]
[:blank:] [ ],标准是空格和TAB,但Oracle里只有空格!
[:cntrl:] CONTROL键
[:graph:] 即所有可见字符,不包括空格
[:print:] 可打印字符 ,即空格+所有可见字符
[[:space:]] 空白字符。
[[:punct:]] 任何标点符号。
[[:upper:]] 任何大写字母。[A-Z]
[[:lower:]] 任何小写字母。[a-z]
[[:xdigit:]]任何16进制的数字,相当于[0-9a-fA-F]。
[:class:] 字符类。class如alnum、digit等。
[.element.]
整理类。受NLS_SORT影响。将多字节字符当作单字节字符看待。如在西班牙语中ch、ll都是用多字节表示的单字节。
[=char=]
等同类。在当前语言(Locale)下,匹配所有的属于相同的POSIX等同类字符指定的字符。如在西班牙语中,[[=n=]]指定了等同类字符n,它可以匹配El
Ni?o中的N和 ?.
边界符集合
^ 每一行的开头,单行模式下等价于字符串的开头
$ 每一行的结尾,单行模式下等价于字符串的结尾
在单行模式下,^和\A等价,$和\Z等价。
重复次数集合
* 匹配零次或多次--尽可能多的次数
? 零次或一次
+ 一次或多次
{m} {m}?正好m次,贪婪与非贪婪一样的
{m,} {m,}?至少m次
{m, n} {m, n}?最少m最多n次
在上述字符后加?,如:*?,即为非贪婪模式。
贪婪模式会获取尽可能多的字符,而非贪婪模式会获取尽可能少的字符
组合操作符
[…]
方括号内任意字符或字符集合中的一个。在其中所有的操作符号都被视为普通符号,但以下除外:
★范围操作符:-
但当"-"位于字符列表的第一个或最后一个字符时,或位于范围的结尾时,会被当作"-"本身来看待。
当右方括号"]"出现在列表的第一个位置时,它会被当作"]"本身来处理。
[^…]
方括号内^为第一个字符时,表示与其后所有字符都不匹配的字符
(…)
圆括号,将复杂表达式当作单一表达式来处理
..|.. 或
abc
和。直接将字符连在一起写
匹配操作符
\n
即后向引用。n为1~9,标识由圆括号里取得的匹配字符串。方向是从左到右。
转义操作符
\
将其后紧跟着的操作字符当作普通字符看待。
例如 abc*def 可以匹配
abdef或abcccdef等,但无法匹配abc*def,后者需要abc\*def才能匹配
示例:
1.提取纯数字
select abc from
table where REGEXP_LIKE
(abc,'^[[:digit:]]+$') group by abc;
2.替换交换位置
select regexp_replace('Sang Cen', '(.*) (.*)',
'\2, \1') as reversed_name from
dual;
3.截取第一个大写字母
select regexp_substr('Sang Cen',
'^[[:upper:]]') from DUAL
4.返回try或trying或tried或tries的位置
SELECT regexp_instr('We are trying to make the subject
easier.','tr(y(ing)?|(ied)|(ies))') resultnum FROM
dual;