为什么这个Oracle regexp_like测试为FALSE?

时间:2017-05-24 14:32:03

标签: regex oracle plsql oracle11g

为什么这个Oracle regexp_like表达式测试错误? 我在Oracle 11g上运行这个PLSQL。

v_string 是一个0和两个空格。它在 REGEX101

测试为TRUE

Oracle regexp_like

 declare  v_string varchar2(30) := '0  ';

 begin    
 dbms_output.put_line('Length is ' || length(v_string) );   

 if  regexp_like(v_string,'^[0-9A-Z\s]{1,3}$') then   
      dbms_output.put_line('TRUE');    
 else    
      dbms_output.put_line('FALSE');    
 end if;   

 end;

1 个答案:

答案 0 :(得分:4)

您不应在括号表达式中使用速记字符类,因为它被视为2个单独的字符\s。使用等效的[:space:] POSIX字符类:

'^[0-9A-Z[:space:]]{1,3}$'
         ^^^^^^^^^