Отрицание определенных последовательностей конца строки в rlike регулярном выражении - PullRequest
1 голос
/ 02 декабря 2008

Я хочу сопоставить любую строку, которая не заканчивается 'CA' или 'CA [любое число]'. Как я могу сделать это, используя rlike в MySQL? (Обратите внимание, что он не поддерживает?! И т. Д.).

Вот регулярное выражение для положительного совпадения, мне просто нужен способ отменить его: '^.*[C][A][0-9]?$'

(из-за смущающего архитектурного ограничения я не хочу использовать not rlike ...)

Ответы [ 2 ]

6 голосов
/ 03 декабря 2008

Трюк превращает его в описание того, что вы делаете , чтобы соответствовать. Что-то не заканчивается в CA или CA (цифра), когда:

Он заканчивается чем-то отличным от A или цифры, или

Он заканчивается чем-то отличным от A, затем цифрой или

Он заканчивается чем-то отличным от C, затем A, затем цифрой или

Он заканчивается чем-то отличным от C, затем A или

Это равно А, за которым следует цифра, или

равно А или цифре, или

Пусто.

Итак:

rlike '[^A0-9]$|[^A][0-9]$|[^C]A[0-9]$|[^C]A$|^A[0-9]$|^[A0-9]$|^$'

Не проверено, не "оптимизировано", возможно, по крайней мере, одна ошибка где-то в приведенном выше.

2 голосов
/ 02 декабря 2008

Ну, регулярное выражение исходит из столбца в таблице, и большинство моделей там уже работают. Так было бы проще всего, если бы я мог сделать этот шаблон работа в рамках существующей структуры.

Однажды я сделал нечто похожее, я создал еще один столбец (я думаю, что использовал битовое поле), в котором содержались параметры для регулярного выражения (нечувствительность к регистру, привязка, отрицание и т. Д.). Подобный подход может работать для вас.

...