Postgres正则表达式:\ s和\ S和字符类的行为似乎是错误的

Lei*_*eif 12 regex postgresql

文档说\ s是空格,\ S不是空格.到目前为止,对正则表达式用户来说并不新鲜.

但是让我们检查一些返回值:

SELECT SUBSTRING('abc a c' FROM 'a\\sc');
'a c'

SELECT SUBSTRING('abc a c' FROM 'a[\\s]c'); -- Note the character class
'a c'

SELECT SUBSTRING('abc a c' FROM 'a\\Sc');
'abc'

SELECT SUBSTRING('abc a c' FROM 'a[\\S]c'); -- Note the character class
ERROR:  invalid regular expression: invalid escape \ sequence
Run Code Online (Sandbox Code Playgroud)

所以看起来,\ s可以在字符类中使用而\ S不能.为什么?

NPE*_*NPE 8

手册:

在括号表达式中,\ d,\ s和\ w将丢失其外括号,\ D,\ S和\ W是非法的.

在任何情况下,括号显得多余,因为\s\S自己的字符类.

以下语法适用于我作为替代a[\\S]c:

SELECT SUBSTRING('abc a c' FROM 'a[^[:space:]]c');
Run Code Online (Sandbox Code Playgroud)