синтаксис регулярных выражений с операторами ~, ~ *.

веденном ниже примере я получил TRUE только с выражением SIMILAR TO; LIKE и ~ оба показали ЛОЖЬ (я не смог здесь работать?)

Поскольку SIMILAR TO не подходит для многих публикаций SO, я хотел бы узнать, есть ли способ сопоставления регулярных выражений с альтернативами с помощью LIKE или ~.

SELECT 'thomas' SIMILAR TO '%(h|x)%'
-- result: t

SELECT 'thomas' LIKE '%(h|x)%'
-- result: f

SELECT 'thomas' ~* '%(h|x)%'
-- result: f
 Erwin Brandstetter25 окт. 2017 г., 03:20
Никогда использованиеSIMILAR TO: stackoverflow.com/a/12459689/939860
 a_horse_with_no_name19 окт. 2017 г., 20:42
LIKE не поддерживает регулярные выражения. В которойруководство у тебя такое впечатление?

Ответы на вопрос(2)

Решение Вопроса

ЛЮБИТЬ поддерживает сопоставление с шаблоном_ для любого отдельного символа и% для любой последовательности символов, так что это:

не работает, потому что как не понимает(...) для группировки или| для чередования это просто буквальные символы в шаблоне LIKE.

ПОХОЖИЙ НА опоры_ а также% так же, как LIKE, но добавляет группировку с(...)чередование с|и еще несколько вещей, так это:

SELECT 'thomas' SIMILAR TO '%(h|x)%'

работает как положено.

~* использует регулярные выражения POSIX так(...) для группировки и| для чередования, но% просто знак процента; это означает, что это:

SELECT 'thomas' ~* '%(h|x)%'

ищетh или жеx окружены знаками процента и не работают так, как вы ожидаете.

Твой~* версия будет работать, если вы используете правильное регулярное выражение, например:

SELECT 'thomas' ~* '(h|x)' -- alternation
SELECT 'thomas' ~* 'h|x'   -- alternation without an unnecessary grouping
SELECT 'thomas' ~* '[hx]'  -- or a character class

Документация, на которую ссылаются выше, охватывает все это.

Вы можете использовать ~ * в этом случае:

SELECT 'thomas' ~* '.*(h|x).*'

или же

SELECT 'thomas' ~* 'h|x'

Имейте в виду, что вы должны использоватьPOSIX синтаксис регулярных выражений с операторами ~, ~ *.

Ваш ответ на вопрос