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

在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    1 1 , ' 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    1 1 , ' 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    1 1 , ' 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    1 1 , ' 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    1 1 , ' 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    1 1 , ' 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    1 1 , ' 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    1 1 , ' i ' ))  as  Reg_Str  FROM  dual;

 

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

你可能感兴趣的:(oracle)