文档说\ 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
所以看来,\ s可以在字符类中使用而\ S不能。为什么呢?
答案 0 :(得分:8)
来自the manual:
在括号表达式中,\ d,\ s和\ w会丢失其外括号, 和\ D,\ S和\ W是非法的。
在任何情况下,括号似乎都是多余的,因为\s
和\S
本身就是字符类。
以下语法对我来说可以替代a[\\S]c
:
SELECT SUBSTRING('abc a c' FROM 'a[^[:space:]]c');