Oracle 正则表达式下的 [:album:] POSIX 字符 Class 中不接受 '1A'

'1A' is not accepted in [:alnum:] POSIX Character Class under Oracle regular expresssion

为什么字母数字 class 中不考虑“1A”?

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

一对未转义的 [...] 创建一个 bracket expression。 POSIX 字符 classes,如 [:alpha:][:alnum:],只能在括号表达式内声明。

[:digit:] is a POSIX character class, used inside a bracket expression like [x-z[:digit:]].

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

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

看到 online demo.

('1a', '[:alnum:]') seems to acceptable.

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