会计考友 发表于 2012-8-4 13:54:49

Oracle辅导:Oracle正则表达式注意问题

在Oracle 11g中,当在正则表达式赌暌姑了中括号时,某些符号会匹配不了,如,要用近似于[[:digit:][:blank:]]才能匹配成功,以下是我测试的例子:   1 --中括号中的内容为一杠及空格([- ]),匹配成功,结不美观为:SA01-2345 6789 0123 4567 8900
  2 SELECT to_char(REGEXP_SUBSTR('SA01-2345 6789 0123 4567 8900',
  3 'SAd{2}[- ]d{4}[- ]d{4}[- ]d{4}[- ]d{4}[- ]d{4}|SAd{22}',
  41, 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 'SAd{2}[-[:blank:]]d{4}[-[:blank:]]d{4}[-[:blank:]]d{4}[-[:blank:]]d{4}[-[:blank:]]d{4}|SAd{22}',
  91, 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}',
  141, 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}',
  191, 1,'i')) as Reg_Str FROM dual;

  20

会计考友 发表于 2012-8-4 13:54:50

Oracle辅导:Oracle正则表达式注意问题

</p>  21 --中括号中的内容为([-d[:blank:]]),匹配失踪败,结不美观为空
  22 SELECT to_char(REGEXP_SUBSTR('SA01-2345 6789 0123 4567 8900',
  23 '(SA)?[-d[:blank:]]{22,50}',
  241, 1,'i')) as Reg_Str FROM dual;
  25
  26 --中括号内容如下,匹配失踪败,结不美观为空
  27 SELECT to_char(REGEXP_SUBSTR('SA01-2345 6789 0123 4567 8900',
  28 '(SA)?[-ds]{22,50}',
  291, 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}',
  341, 1,'i')) as Reg_Str FROM dual;
  35
  36 --中括号中的内容为([-s]),匹配失踪败,结不美观为空
  37 SELECT to_char(REGEXP_SUBSTR('SA01-2345 6789 0123 4567 8900',
  38 'SAd{2}[-s]d{4}[-s]d{4}[-s]d{4}[-s]d{4}[-s]d{4}|SAd{22}',
  391, 1,'i')) as Reg_Str FROM dual;
页: [1]
查看完整版本: Oracle辅导:Oracle正则表达式注意问题