oracle正则表达式----通过解析商品名称学习

来源:互联网 发布:mac office 安装失败 编辑:程序博客网 时间:2024/06/04 19:55

1.oracle 正则统配符号

'^'     匹配开始位置,注:方括号内表示否的意思。
'$'    匹配结尾位置
'.'    匹配除换行符 \n之外的任何单字符。
'?'   匹配前面的子表达式零次或一次。
'*'    匹配前面的子表达式零次或多次。
'+'   匹配前面的子表达式一次或多次。
'( )'  标记一个子表达式的开始和结束位置。
'[]'   标记一个中括号表达式。
'{m,n}'    m=<出现次数<=n
'|'   或
\num 匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。

 2.Oracle正则字符簇

 [[:alpha:]] 任何字母。
 [[:digit:]] 任何数字。
 [[:alnum:]] 任何字母和数字。
 [[:space:]] 任何白字符。
 [[:upper:]] 任何大写字母。
 [[:lower:]] 任何小写字母。
 [[unct:]] 任何标点符号。
 [[:xdigit:]] 任何16进制的数字,相当于[0-9a-fA-F]。


3.匹配取值

 ‘c’   说明在进行匹配时区分大小写(缺省值);
  'i'   说明在进行匹配时不区分大小写;
  'n'   允许使用可以匹配任意字符的操作符;
  'm'   将x作为一个包含多行的字符串。


4.常用的函数

REGEXP_SUBSTR :返回匹配模式的子字符串。

REGEXP_INSTR:该函数查找 pattern ,并返回该模式的第一个位置。

REGEXP_REPLACE::字符串替换函数。相当于增强的replace函数。

REGEXP_LIKE:返回满足匹配模式的字符串。相当于增强的like函数。

5.实际举例---解析商品

5.1商品单位、容量、数量解析

假设有10个商品,我们需要解析出所有单位(毫升或升)、容量(如555)、数量如(20 )


步骤一:商品解析

-----匹配增加两列,
-----第一列匹配含有数字+(ml、L、升、毫升)的字段p1,
-----第二列包含(*、+、X等)+数字的字段  p2
      select    
      prod_name,
      regexp_substr( prod_name, '([[:digit:]]+\.)?[[:digit:]]+( )*(ml||ML|毫|升|毫升)+', 1,1,'i' ) p1,
      regexp_substr( prod_name, '(\*|X|×|*)( )*[[:digit:]]+',  1,1,'i' )  p2
      from test1

结果如下


步骤二----生成三列,
----pp1由p1解析只含有字母的列
----pp2由p1解析只含有数字的列、
----pp3由p2解析只含有数字的列      
select   
prod_name,
regexp_substr(p1,'([[:alpha:]])+') pp1,
regexp_substr(p1,'([[:digit:]]+\.?)+')  pp2,
regexp_substr(p2,'([[:digit:]])+')  pp3
from test2     
 其结果如下

通过这些方法就把商品单位、容量、数量均解析出来了

5.2选择限定商品

我们希望选择单位为ml的商品

select  * from test3 where regexp_like(pp1,'ml','i')

到此就大致记录了工作种用到的Oracle正则表达式,后续会继续增加,所学到的正则


0 0
原创粉丝点击