2017-05-24 56 views
2

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

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

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

只是供参考:您的Oracle中的正则表达式与空白不匹配。但它会匹配'0s'。 –

回答

4

不应使用括号表达式,因为它是作为2个独立的字符,\s处理内部的速记字符类测试TRUE。使用等效的[:space:] POSIX字符等级:

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

谢谢,您引导我朝着正确的方向发展:https://docs.oracle.com/cd/B12037_01/server.101/b10759/ap_posix001.htm#i690819 – zundarz