Соответствие регулярному выражению на красном смещении - PullRequest
1 голос
/ 17 апреля 2020

У меня небольшие проблемы с регулярным выражением на красном смещении. Регулярное выражение прекрасно работает, когда я использую его в моем scala коде, но не работает с красным смещением. Я понимаю, что синтаксис может быть несколько другим в красном смещении. Может ли кто-нибудь помочь мне здесь.

регулярное выражение: (^VISA\s*MONEY\s*TRANSFER\s*.*\s*CASH\s*APP\**\s*.*Visa Direct CA.*\s*)

в красное смещение:

select *
from table where column ~ '(^VISA\s*MONEY\s*TRANSFER\s*.*\s*CASH\s*APP\**\s*.*Visa Direct CA.*\s*)' limit 2;

Ошибка:

ОШИБКА: XX000 : Недопустимое предыдущее регулярное выражение перед оператором повторения. Произошла ошибка при разборе фрагмента регулярного выражения: «ASHs * APP ** >>> HERE >>> s *. * Visa D».

1 Ответ

2 голосов
/ 17 апреля 2020

Причиной ошибки является часть 'APP\**': поскольку вы использовали не буквальный обратный символ sh, а символ перехода перед неожиданным вторым символом последовательности escape-последовательности строки, обратный символ sh был удален механизмом, и полученный шаблон APP** вызвал исключение, поскольку сам квантификатор не может быть определен количественно.

Вы можете использовать

select * from table where column ~ '^VISA\\s*MONEY\\s*TRANSFER.*CASH\\s*APP.*Visa Direct CA.*' limit 2;

Я удалил некоторые избыточные шаблоны и правильно избежал обратной косой черты. Чтобы ввести литерал с обратной стороны sh, вам нужно удвоить его в строковом литерале.

...