2016-06-27 7 views
0

У меня есть таблица, называемая областями и областью столбцов, которая не пуста. В нем есть текст, который является «Ташкентом». Я пытаюсь получить к нему доступ с помощью выражения. Вот мой код:Правильное регулярное выражение в PostgreSQL

select * from regions where lower(region) ~ '[t]{1,}[k]{1,}'; 

Как вы можете видеть, что я пытаюсь получить слово, которое содержит буквы t и k последовательно. Согласно моему выражению: [t]{1,}[k]{1,} выше, он должен вернуть текст 'Tashkent', но не возвращается. Правильно ли мой код. Можете ли вы предложить альтернативный код, чтобы получить слово «Ташкент», зная, что у меня есть письма t и k?

ответ

1

Вы должны указать символы между t и k

select lower('Tashkent') ~ 't{1,}.*k{1,}'; 
?column? 
---------- 
t 
+0

Да, за работой. Огромное спасибо. Я искал много источников, чтобы больше узнать о POSIX и выражениях отдельно; даже документация PSQL, но не так много. Можете ли вы предложить какой-нибудь источник, чтобы опираться? Спасибо еще раз. –

+0

@ShohruhAbduakhatov: термин для поиска является нерегулярным выражением –

+0

@ShohruhAbduakhatov: [Руководство для Postgresql] (https://www.postgresql.org/docs/current/static/functions-matching.html#FUNCTIONS-POSIX-REGEXP) –

1

1) Если я понимаю, что вы хотите регулярное выражение не является необходимым:

 select * from regions where region ilike '%t%k%' 

2) если вы хотите абсолютно сделать это с regex:

  • Ваш запрос: 't {1,}. * k {1,}' возвращает true, только если у вас есть "tk" в вас r string, например, «azerty ttk qwerty».
  • Хорошим решением является решение Clodoaldo А. Нето: нижняя (область) ~ 'т {1,} * к {1}.'

  • Можно также удалить нижнюю функцию с области ~ «[Tt] { 1} * [кК] {1}»

  • и, наконец, {1} можно заменить +: область ~ '. [Tt] + * [кК] +'
+0

Ницца. Хороший ответ. Thanx, много полезных вещей, чтобы учиться в одном ответе. Большое спасибо –

Смежные вопросы