当前位置:首页 > 开发 > 数据库 > 正文

oracle正则表达式的用法

发表于: 2013-11-01   作者:0624chenhong   来源:转载   浏览:
摘要:   方括号表达示 方括号表达式 描述 [[:alnum:]] 字母和数字混合的字符 [[:alpha:]] 字母字符 [[:cntrl:]] 控制字符 [[:digit:]] 数字字符 [[:graph:]] 图像字符 [[:lower:]] 小写字母字符 [[:print:]] 打印字符 [[:punct:]] 标点符号字符 [[:space:]]
  方括号表达示
方括号表达式
描述
[[:alnum:]]
字母和数字混合的字符
[[:alpha:]]
字母字符
[[:cntrl:]]
控制字符
[[:digit:]]
数字字符
[[:graph:]]
图像字符
[[:lower:]]
小写字母字符
[[:print:]]
打印字符
[[:punct:]]
标点符号字符
[[:space:]]
空格字符
[[:upper:]]
大写字母字符
[[:xdigit:]]
十六进制数字字符

l        元字符
元字符
描述
*?
如果有前面字符串的0次以上出现时匹配
+?
如果有前面字符串的1次以上出现时匹配
{m}
m是整数。它文本中找出给定子表达式的恰好m次出现
{n}?
前面的字符串只出现一次时匹配
{m,}
M是整数。它在文本中找出给定子表达示的至少m次出现
{n,}?
匹配前面的字符串至少n次
{m,n}
M和n是整数。它在文本中找出给定子表达示的m到n次出现
{n,m}
匹配前面的字符串至少到n次,但不多于m次
c
查询操作区分大小写
i
查询操作不区分大水写
m
多行字符串上的查询,在源字符串包含多行时,该查询允许用(^)模式匹配字符串的开始
n
通常匹配单个字符,也可以匹配新行
x
需要忽略正则表达示中的空格字符时,使用参数‘X’
\A
匹配字符串首,而不是行首,因而多行字符串不能匹配每一行
\d
匹配任意数字字符
\D
匹配任意非数字字符
\s
匹配任意空格字符
\S
匹配任意非空格字符
\w
匹配任意字符和数字。该字符和[:alnum:]之间的不同是\w包括下划线字符
\W
匹配任意非空字符串
*
通配符。找出在文本中包含0或多次给定子表达式出现的记录
+
找出在文本中包含1或多次给定子表达式出现的记录

找出在文本中包含0次或1次给定子表达示出现的记录
.
匹配文本中的任意字符
^
锚。如果该字符后的表达式出现在行首,则匹配成功
$
锚。如果该字符后的表达式出现在行首,则匹配成功
|
分隔符,使用方法和OR相同
(….)
分组子表达式

l        正则表达式运算符和函数

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

不过regexp_like这种方式也有缺陷,字符串限制在4000个字符,并且要写在一行,否则查不出换行的符合条件的。

oracle正则表达式的用法

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
转载请注明出处:http://blog.csdn.net/guoyjoe/article/details/8852184 ORACLE中的支持正则表达式
小括号中的连续字符作为可选: "Nov" -match "\bNov(ember)?\b" 返回true "November" -match "\bNov
在线正则表达式生成器(转) 对正则表达式很头疼,是不是?每次看到都觉得像看天书似的,别说让人自
要求:现有文本:“牧牌全脂牛奶1L*12盒【品牌】: 牧牌【规格】:1L*12盒(乳脂肪含量≥3.5%)【产
Oracle使用正则表达式离不开这4个函数: 1。regexp_like 2。regexp_substr 3。regexp_instr 4。rege
Oracle使用正则表达式离不开这4个函数: 1。regexp_like 2。regexp_substr 3。regexp_instr 4。rege
那个Oracle的正则表达式4个函数看起来简单用起来麻烦,记起来繁琐! 一般很讨厌开源的东西搞个参数
Oracle Connect By用法 oracle中的select语句可以用START WITH...CONNECT BY PRIOR子句实现递归查询
在做项目经常遇到分科室、人员进行汇总的问题,在ORACLE中对此类问题的处理相当方便!下面以项目中
原来表数据 现在需求是 每位userinfoid发表的最新一条数据 ( select smallblog. * ,rank() over (pa
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号