Postgres regex: поведение \ s и \ S и класс символов кажутся неправильными - PullRequest
12 голосов
/ 23 сентября 2011

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

1 Ответ

8 голосов
/ 23 сентября 2011

С инструкция :

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

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

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

SELECT SUBSTRING('abc a c' FROM 'a[^[:space:]]c');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...