文档说\ 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不能.为什么?
从手册:
在括号表达式中,\ 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)