在我的pl / sql脚本中,Oracle在使用[:upper:]字符类语法进行搜索时将字母'e'视为大写。
即
REGEXP_LIKE('e', '[:upper:]')
REGEXP_LIKE('e', '[:lower:]')
可在此处找到相关的Oracle文档:
答案 0 :(得分:11)
当您使用方括号[]
包围它们时,字符类似乎有效:
SQL> SELECT * FROM dual WHERE regexp_like('e', '[[:upper:]]');
DUMMY
-----
SQL> SELECT * FROM dual WHERE regexp_like('E', '[[:upper:]]');
DUMMY
-----
X
当您使用单一括号时,Oracle会将它们视为字符列表,以下是有效的,因为u
包含在字符串:upper:
中:
SQL> SELECT * FROM dual WHERE regexp_like('u', '[:upper:]');
DUMMY
-----
X
答案 1 :(得分:4)
作为对文森特答案的补充说明,这是一个常见的正则表达式陷阱。参见例如Why is using a POSIX character class in my regex pattern giving unexpected results? - 您可以将Perl作为Oracle SQL读取,因为正则表达式问题和解决方案与您的情况相同。
这也是用GNU grep说明的相同案例:
$ echo E | grep -e '[:upper:]'
grep: character class syntax is [[:space:]], not [:space:]
$ echo E | grep -e '[[:upper:]]'
E
$
所以这里没有特别的Oracle。