Oracle常规表达式下的[:alnum:] POSIX字符类不接受'1A'

时间:2017-08-28 13:44:21

标签: regex oracle11g alphanumeric

为什么不在字母数字类中考虑'1A'?

SELECT 'yes'
FROM dual
WHERE REGEXP_LIKE('1A', '[:alnum:]');

1 个答案:

答案 0 :(得分:1)

一对未转义的[...]创建bracket expression。 POSIX字符类(如[:alpha:][:alnum:])只能在括号表达式中声明。

  

[:digit:]是一个POSIX字符类,在括号表达式[x-z[:digit:]]中使用。

在括号表达式中使用POSIX字符类:

SELECT 'yes' FROM dual WHERE REGEXP_LIKE('1A', '[[:alnum:]]')

enter image description here

查看online demo

  

('1a', '[:alnum:]')似乎可以接受。

请注意,当您使用'[:alnum:]'时,正则表达式引擎会将其解析为与括号表达式中定义的任何字符/字符范围匹配的常规括号表达式。即[:alnum:]正则表达式匹配任何:alnum的单个字符。由于您的输入为a1a),因此正则表达式引擎会在输入中遇到a时返回有效匹配。