日期:2014-05-17  浏览次数:20899 次

oracle中求正则表达式!
想了很久想不出简便的办法,目前感觉正则表达式会比较简单,但正则表达式不是很懂,求大神帮忙,如有其它简单办法,求教育。
需求如下:一个手机号码如果含有以下规则之一,则判定属于该级别(级别太多,就举其中一个例子【第10个级别】)
888 
44444 
ABCDEF(连续递增) 
56789 
AAABBB(A≠4,B=0.1.2.3.5) 
AAABBB(A=4,B=6.7.8.9) 
AABBCC(均不带4,连续递增) 
ABCDABCD(ABCD可不连续,均不带4) 
AAABB(A≠4,B=6.7.8.9) 
AABBB(A≠4,B=6.7.8.9) 
需要写一个Function(手机号码,等级) 返回“是”或“否”

试了下AAABBB(A≠4,B=0.1.2.3.5) 这个例子,但好像不对
declare 
  v_bill_id varchar2(500) default '13513565552';
begin
  dbms_output.put_line(regexp_instr(v_bill_id,'([^4]){3}([01235]){3}'));
end;

------最佳解决方案--------------------
正则表达式处理不了这么复杂的规则,你可以先把AABBCC这类的转换为可能的数字组合并放在同一级,然后用like操作比较好
------其他解决方案--------------------
看不懂,楼主能不能说清楚点规则
------其他解决方案--------------------
已解决,对每个规则都写了个function封装成一个“规则包”
再写一个 “级别包”
再写一个 “档次包”