Oracle正则表达式的计算结果为false



我有一个正则表达式,在我的java应用程序中,它用于计算用户名^[-w.+_@]{1,120}$

https://regexr.com/6vhsf在Regexr中,测试1,2,3按预期通过。

我想在一段PL/SQL代码中应用相同的用户名检查,但是在Oracle中,相同的表达式总是计算为falsehttp://sqlfiddle.com/#!4/2c33a/156

为什么Oracle对表达式的评估不同?

为什么Oracle对表达式的评估不同?

Oracle不将w作为字符组中的一个字字符匹配,而是将其作为单个字符w匹配。

注意:不要使用regexr.com测试Oracle正则表达式,因为Oracle不支持在该网站上测试的正则表达式语法

如果要匹配括号表达式中等效的w,则可以匹配下划线_0-9a-zA-Z或POSIX字符类[:alnum:]

所以要么:

SELECT *
FROM   device
WHERE  REGEXP_LIKE(x, '^[0-9a-zA-Z.+_@-]{1,120}$')

或:

SELECT *
FROM   device
WHERE  REGEXP_LIKE(x, '^[[:alnum:].+_@-]{1,120}$')

注意2:当匹配-时,它需要是括号表达式中的第一个或最后一个。但是,如果需要在括号表达式中同时匹配]-,则]必须是第一个字符,-必须是最后一个字符,因此始终将-作为括号中的最后一个角色是一个好习惯

最新更新