正则表达式一

/*
函数名:REGEXP_SUBSTR
功能描述:REGEXP_SUBSTR 函数使用正则表达式来指定返回串的起点和终点,返回与source_string 字符集中的VARCHAR2 或CLOB 数据相同的字符串。
语法:
REGEXP_SUBSTR与SUBSTR函数相同,返回截取的子字符串
REGEXP_SUBSTR(srcstr, pattern [, position [, occurrence [, match_option]]])
参数说明:
srcstr                源字符串
pattern               正则表达式样式
position              开始匹配字符位置,默认值为1
occurrence            匹配次数 ,默认值为1
match_option          匹配选项(区分大小写)
*/
SELECT regexp_substr('1-2-3-4', '[[:alnum:]]+') FROM dual;
--结果:1
SELECT regexp_substr('1-2-3-4', '[[:alnum:]]+',1,2) FROM dual;
--结果:2
SELECT regexp_substr('1-2-3-4', '[[:alnum:]]+',1,3) FROM dual;
--结果:3
SELECT regexp_substr('1-2-3-4', '[[:alnum:]]+',1,4) FROM dual;
--结果:4
SELECT regexp_substr('1-2-3-4', '-*[[:alnum:]]+',1,1) FROM dual;
--结果:1
SELECT regexp_substr('1-2-3-4', '-+[[:alnum:]]+',1,1) FROM dual;
--结果:-2

/*
  *匹配0个或者多个
  +匹配一个或者多个
  如:-* 匹配0个或者多个*,[[:alnum:]]+ 匹配一个或者多个字母或者数字字符
*/

--===匹配非-的字符串
select regexp_substr('F1-2-3-4','[^-]+') from dual;
--结果:F1
--===匹配一个或多个数字结尾的字符
select regexp_substr('F1-2-3-4','[[:digit:]]+$') from dual;
--结果:4
--===匹配一个或多个字符或数字字符结尾的字符
select regexp_substr('F1-2-3-a','[[:alnum:]]+$') from dual;
--结果:a
--===匹配一个或多个非数字的字符
select regexp_substr('F1-2-3-a','[^[:digit:]]+',1,2) from dual; 
--结果:-
--===匹配一个或多个非数字结尾的字符
select regexp_substr('F1-2-3-a','[^[:digit:]]+$') from dual; 
--结果:-a
--===匹配一个或多个非数字非-的字符
select regexp_substr('F1-2-3-a','[^[:digit:]-]+',1,2) from dual;
--结果:a
--===匹配0个或多个字母或数字字符的字符
select regexp_substr('F1-2-3-a','[[:alnum:]]*',1,2) from dual;
--结果:Null
--===匹配1个或多个字母或数字字符的字符
select regexp_substr('F1-2-3-a','[[:alnum:]]+',1,2) from dual;
--结果:2
/*
   [[:alnum:]]* 表示匹配0个或者多个字母或者数字字符
   注:因为是匹配0个或者多个,所以这里第2次匹配的是“-”(匹配了0次),而不是“2”,所以结果是“Null”
*/

--===匹配重复出现
--===查找连续2个小写字母
SELECT regexp_substr('Republicc Of AfricAa', '([a-z])\1', 1, 2,'i') FROM dual;
--结果: Aa
SELECT regexp_substr('Republicc Of AfricAa', '([a-z])\1', 1, 2) FROM dual;
--结果: null
/*
  ([a-z])表示小写字母a-z
  \1 表示匹配前面的字符的连续次数
  1 表示从源字符串的第1个字符开始匹配
  1 第1次出现符合匹配结果的字符
  i 表示不区分大小写
*/

--===查找网页地址信息
SELECT regexp_substr('Go to http://www.oracle.com/products and click on database', 'http://([[:alnum:]]+\.?){3,4}/?') FROM dual;
--结果:http://www.oracle.com/
/*
  http://  表示匹配字符串“http://”
  ([[:alnum:]]+\.?) 表示匹配1次或者多次字母或数字字符,紧跟0次或1次逗号符
  {3,4}表示匹配前面的字符最少3次,最多4次
  /? 表示匹配一个反斜杠字符0次或者1次
*/

SELECT regexp_substr('1101,Yokohama,Japan,1.5.105', '[^,]+', 1, LEVEL) AS output
FROM dual CONNECT BY LEVEL <= length('1101,Yokohama,Japan,1.5.105') - length(REPLACE('1101,Yokohama,Japan,1.5.105', ',')) + 1; 
/*
--结果:
  1101
  Yokohama
  Japan
  1.5.105
*/

/*
函数名:REGEXP_LIKE
*/
SELECT CASE
   WHEN REGEXP_LIKE('Why does a kid enjoy kidding with kids only?',
        'kid(s|ding)*',
        'i') THEN
    'Match Found'
   ELSE
    'No Match Found'
    END AS OUTPUT
  FROM DUAL;
--结果: Match Found
/*
  kid 表示字符串kid
  (s|ding)* 表示匹配0次或者多次字符“s”或者“ding”
  i 表示不区分大小写
*/


/*
函数名:REGEXP_INSTR
功能描述:REGEXP_INSTR 函数使用正则表达式返回搜索模式的起点和终点。REGEXP_INSTR 的语法如下所示。
          REGEXP_INSTR 返回一个整数,指出搜索模式的开始或结束的位置,如果没有发现匹配的值,则返回0。
语法:
      REGEXP_INSTR(srcstr, pattern [, position [, occurrence [, return_option [,match_option]]]])
      与REGEXP_SUBSTR一样,它也有变量pattern、position(开始位置)、occurrence 和match_parameter;
      新参数return_option 的作用,匹配成功后返回位置是哪里,比如我们经常要获取匹配位置的下一个位置。
*/

--===匹配数字出现的位置
SELECT regexp_instr('abc1def', '[[:digit:]]') output  FROM dual;
--结果:4
--如果return_option 为1,则Oracle 返回跟在所搜索字符出现以后下一个字符的位置。
--例如,下面的查询返回了在串中发现的第一个数字后的位置:
SELECT regexp_instr('abc1def', '[[:digit:]]',1,1,1) output FROM dual;
--结果:5

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值