cundeng 发表于 2018-9-14 11:26:26

Oracle正则表达式的用法

  转载自http://space.itpub.net/20948385/viewspace-665735
Oracle正则表达式的用法
  l方括号表达示
  方括号表达式
  描述
  [[: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      '?[-.]?(\(?[[: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
  3where regexp_like(job, '(clerk|analyst)', 'i');
  ENAME   JOB
  ---------- ---------
  SMITH   CLERK
  SCOTT   ANALYST
  ADAMS   CLERK
  JAMES   CLERK
  FORD      ANALYST
  MILLER    CLERK

页: [1]
查看完整版本: Oracle正则表达式的用法