我有一个正则表达式,在我的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:当匹配-
时,它需要是括号表达式中的第一个或最后一个。但是,如果需要在括号表达式中同时匹配]
和-
,则]
必须是第一个字符,-
必须是最后一个字符,因此始终将-
作为括号中的最后一个角色是一个好习惯