Подтвердить что ты не робот

Регулярное выражение Postgres: поведение \s и\S и класс символов кажется неправильным

В документации указано, что \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 не может. Почему?

4b9b3361

Ответ 1

Из руководство:

В скобках выражения \d,\s и\w теряют свои внешние скобки, и \D,\S и\W являются незаконными.

В любом случае скобки кажутся избыточными, поскольку \s и \s сами являются классами символов.

Следующий синтаксис работает для меня как альтернатива a[\\S]c:

SELECT SUBSTRING('abc a c' FROM 'a[^[:space:]]c');