Oracle正则表达式中注意的问题

本文探讨了在Oracle11g数据库中使用正则表达式的注意事项,特别是涉及中括号内的特殊字符匹配问题。通过多个实例对比,展示了如何正确配置正则表达式以实现预期的字符串匹配。

在Oracle 11g中,当在正则表达式中用了中括号时,某些符号会匹配不了,如[\s\d],要用类似于[[:digit:][:blank:]]才能匹配成功,以下是我测试的例子:

 

 1 --中括号中的内容为一杠及空格([- ]),匹配成功,结果为:SA01-2345 6789 0123 4567 8900
 2 SELECT to_char(REGEXP_SUBSTR('SA01-2345 6789 0123 4567 8900',
 3 'SA\d{2}[- ]\d{4}[- ]\d{4}[- ]\d{4}[- ]\d{4}[- ]\d{4}|SA\d{22}',
 4  11,'i')) as Reg_Str FROM dual;
 5 
 6 --中括号中的内容为([-[:blank:]]),匹配成功,结果为:SA01-2345 6789 0123 4567 8900
 7 SELECT to_char(REGEXP_SUBSTR('SA01-2345 6789 0123 4567 8900',
 8 'SA\d{2}[-[:blank:]]\d{4}[-[:blank:]]\d{4}[-[:blank:]]\d{4}[-[:blank:]]\d{4}[-[:blank:]]\d{4}|SA\d{22}',
 9  11,'i')) as Reg_Str FROM dual;
10 
11 --如果将中括号换成小括号,匹配成功,结果为:SA01-2345 6789 0123 4567 8900
12 SELECT to_char(REGEXP_SUBSTR('SA01  -  2345 6789 0123 4567 8900',
13 '(SA)?\d{2}(\s|-)\d{4}(\s|-)\d{4}(\s|-)\d{4}(\s|-)\d{4}(\s|-)\d{4}|(SA)?\d{22}',
14  11,'i')) as Reg_Str FROM dual;
15 
16 --中括号中的内容为([-[:digit:][:blank:]]),匹配成功,结果为:SA01-2345 6789 0123 4567 8900
17 SELECT to_char(REGEXP_SUBSTR('SA01-2345 6789 0123 4567 8900',
18 '(SA)?[-[:digit:][:blank:]]{22,50}',
19  11,'i')) as Reg_Str FROM dual;
20 
21 --中括号中的内容为([-\d[:blank:]]),匹配失败,结果为空
22 SELECT to_char(REGEXP_SUBSTR('SA01-2345 6789 0123 4567 8900',
23 '(SA)?[-\d[:blank:]]{22,50}',
24  11,'i')) as Reg_Str FROM dual;
25 
26 --中括号内容如下,匹配失败,结果为空
27 SELECT to_char(REGEXP_SUBSTR('SA01-2345 6789 0123 4567 8900',
28 '(SA)?[-\d\s]{22,50}',
29  11,'i')) as Reg_Str FROM dual;
30 
31 --中括号内容如下,匹配失败,结果为空
32 SELECT to_char(REGEXP_SUBSTR('SA01-2345 6789 0123 4567 8900',
33 '(SA)?[-\d ]{22,50}',
34  11,'i')) as Reg_Str FROM dual;
35 
36 --中括号中的内容为([-\s]),匹配失败,结果为空
37 SELECT to_char(REGEXP_SUBSTR('SA01-2345 6789 0123 4567 8900',
38 'SA\d{2}[-\s]\d{4}[-\s]\d{4}[-\s]\d{4}[-\s]\d{4}[-\s]\d{4}|SA\d{22}',
39  11,'i')) as Reg_Str FROM dual;

 

明白原因的麻烦在下面评论,谢谢!

转载于:https://www.cnblogs.com/krisy/archive/2010/01/14/1647913.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值