Oralce 常用正表达式

本文介绍了Oracle数据库中正则表达式的应用,包括REGEXP_SUBSTR、REGEXP_LIKE、REGEXP_INSTR和REGEXP_REPLACE等函数的具体用法,并通过实例展示了如何使用这些函数进行字符串操作。

元字符

参考:http://docs.oracle.com/cd/E11882_01/appdev.112/e41502/adfns_regexp.htm#ADFNS1003

 

* 匹配0次或者多次出现

+ 匹配1次或者多次出现

?非贪婪模式,匹配0次或1次出现

^ 行开始

$ 行结束

. 匹配任一字符 非null或换行符

[] 一个匹配列表 [:   :] 指定类 例如 [:alpha:]

() 单个表达式,作为一个单元

{} 匹配次数

\ 匹配特殊字符,常量后者引用 如 \n 匹配换行符,  \\匹配\,  \)匹配)

 

匹配选项

i  用于不区分大小写的匹配

c  用于区分大小写的匹配

m  将源字符串视为多行

n  将 “.” 作为通配符

 

字符类

[:alnum:] 所有字母和数字字符

[:alpha:]  所有的字母字符

[:blank:]  所有空格字符

[:cntrl:]   所有控制字符

[:digit:]   所有数字

[:xdigit:]    所有十六进制字符

[:lower :]  所有小写字母

[:upper:]  所有大写字母

[:punct:]  所有标点符号

[:space :]  所有空格字符

[:graph :]  包括 [:punct:] [:lower :] [:upper:] [:digit:]

 

REGEXP_SUBSTR

参考:http://docs.oracle.com/cd/E11882_01/server.112/e41084/functions150.htm#SQLRF06303


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。

实例:

SQL> SELECT
  2    REGEXP_SUBSTR('500 Oracle Parkway, RedwoodShores, CA',
  3                  ',[^,]+,')"REGEXPR_SUBSTR"
  4    FROM DUAL;
 
REGEXPR_SUBSTR
-----------------
, Redwood Shores,
 
SQL> SELECT
  2   REGEXP_SUBSTR('http://www.example.com/products',
  3                 'http://([[:alnum:]]+\.?){3,4}/?') "REGEXP_SUBSTR"
  4    FROM DUAL;
 
REGEXP_SUBSTR
-----------------------
http://www.example.com/
 
SQL> SELECT REGEXP_SUBSTR('1234567890', '(123)(4(56)(78))', 1,1, 'i', 1)
  2  "REGEXP_SUBSTR" FROM DUAL;
 
REG
---
123
 
SQL> SELECT REGEXP_SUBSTR('1234567890', '(123)(4(56)(78))', 1,1, 'i', 4)
  2  "REGEXP_SUBSTR" FROM DUAL;
 
RE
--
78


REGEXP_LIKE

http://docs.oracle.com/cd/E11882_01/server.112/e41084/conditions007.htm#SQLRF00501


REGEXP_LIKE

(source string,pattern  [,match_parameter])
source_string:

源字符串

Pattern:

正则表达式

match_parameter:

匹配模式(i:不区分大小写;c:区分大小写;n:允许使用可以匹配任意字符串的操作符;m:将x作为一个包含多行的字符串。

实例:

hr_main.sql脚本 http://wiki.joanillo.org/images/4/48/Hr_main.txt

 
SQL> SELECT first_name, last_name
 2  FROM employees
 3  WHERE REGEXP_LIKE (first_name,'^Ste(v|ph)en$')
 4  ORDER BY first_name, last_name;
 
FIRST_NAME           LAST_NAME
---------------------------------------------
Stephen             Stiles
Steven               King
Steven               Markle
 
3 rows selected.
 
SQL> SELECT last_name
 2  FROM employees
 3  WHERE REGEXP_LIKE (last_name,'([aeiou])\1', 'i')
 4  ORDER BY last_name;
 
LAST_NAME
-------------------------
Bloom
De Haan
Feeney
Gee
Greenberg
Greene
Khoo
Lee
 
8 rows selected.


REGEXP_INSTR

http://docs.oracle.com/cd/E11882_01/server.112/e41084/functions148.htm#SQLRF06300


REGEXP_INSTR

(source_string, pattern [,position [,occurrence[,return_option[,match_parameter]]]])

start_position:

开始搜索位置

Occurrence:

第n次出现pattern,默认为1

return_option:

0:pattern的起始位置

1:pattern下一个字符起始位置默认为0

 

实例:

SQL> SELECT
 2    REGEXP_INSTR('500 OracleParkway, Redwood Shores, CA',
 3                 '[^ ]+', 1, 6)"REGEXP_INSTR"
 4    FROM DUAL;
 
REGEXP_INSTR
------------
         37
 
SQL> SELECT
 2    REGEXP_INSTR('500 OracleParkway, Redwood Shores, CA',
 3                '[s|r|p][[:alpha:]]{6}', 3, 2, 1, 'i') "REGEXP_INSTR"
 4    FROM DUAL
 5  /
 
REGEXP_INSTR
------------
         28
 
SQL> SELECT REGEXP_INSTR('1234567890','(123)(4(56)(78))', 1, 1, 0, 'i', 1)
 2  "REGEXP_INSTR" FROMDUAL;
 
REGEXP_INSTR
------------
          1
 
SQL> SELECT REGEXP_INSTR('1234567890','(123)(4(56)(78))', 1, 1, 0, 'i', 2)
 2  "REGEXP_INSTR" FROMDUAL;
 
REGEXP_INSTR
------------
          4
 
SQL> SELECT REGEXP_INSTR('1234567890','(123)(4(56)(78))', 1, 1, 0, 'i', 4)
 2  "REGEXP_INSTR" FROMDUAL;
 
REGEXP_INSTR
------------
          7


REGEXP_REPLACE

http://docs.oracle.com/cd/E11882_01/server.112/e41084/functions149.htm#SQLRF06302


REGEXP_REPLACE

(source_string, pattern [,replace_string] [,position][,occurtence] [,match_parameter])

replace_string:

用于替换的字符串

Position:

开始搜索的起始位置

occurtence

指定替换第n次出现字符串

其他同上。

实例:

SQL> SELECT
 2    REGEXP_REPLACE('500   Oracle    Parkway,    Redwood  Shores, CA',
 3                   '( ){2,}', '') "REGEXP_REPLACE"
 4    FROM DUAL;
 
REGEXP_REPLACE
--------------------------------------
500 Oracle Parkway, Redwood Shores, CA


regexp_count

http://docs.oracle.com/cd/E11882_01/server.112/e41084/functions147.htm#SQLRF20014


regexp_count是11g引入的,用于统计匹配字符串出现次数。

实例:

SQL> SELECTREGEXP_COUNT('123123123123123', '(12)3', 1, 'i') REGEXP_COUNT
 2     FROM DUAL;
 
REGEXP_COUNT
------------
          5
 
SQL> SELECT REGEXP_COUNT('123123123123','123', 3, 'i') COUNT FROM DUAL;
 
    COUNT
----------
        3




评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值