Регулярное выражение 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 не может. Почему?
Ответы
Ответ 1
Из руководство:
В скобках выражения \d,\s и\w теряют свои внешние скобки, и \D,\S и\W являются незаконными.
В любом случае скобки кажутся избыточными, поскольку \s
и \s
сами являются классами символов.
Следующий синтаксис работает для меня как альтернатива a[\\S]c
:
SELECT SUBSTRING('abc a c' FROM 'a[^[:space:]]c');