Регулярное выражение для postgreSql, которое соответствует всем двузначным числам кроме одного
Возможно ли средствами postgresql regexp составить выражение, которое соответствует всем двузначным числам кроме одного конкретного - например 37.
пожалуйста, не предлагайте варианты использовать ключевое слово NOT - задача состоит в том, чтобы составить именно такой regexp.
Ответы (1 шт):
Автор решения: Alexander Pavlov
→ Ссылка
Самое простое - разбить выражение на две части
- все числа, кроме начинающихся с 3
[12456789][0123456789] - все числа, начинающиеся с 3, но не заканчивающиеся на 7
3[012345689]
Искать (1) или (2)
with recursive nums (n) as (
-- сгенерируем тысячу
values(0) union all select n+1 from nums where n < 999
)
-- все двузначные числа, кроме 37
select * from nums where n::text ~ '^([12456789][0123456789]|3[012345689])$'
Оказывается, Postgres поддерживает negative lookbehind
with recursive nums (n) as (
values(0) union all select n+1 from nums where n < 999
)
select * from nums where n::text ~ '^\d\d(?<!37)$'