Проверить формат varchar. my SQL
Как упрощённо представить себе работу жадного (greedy) регулярного выражения. (на самом деле работают они по-другому, так было бы слишком медленно)
Берём регексп [a-zA-Z0-9]{2}[a-zA-Z]?[0-9]{1,4}[a-zA-Z]? Оно состоит из правил, которым должна соответствовать последовательность символов. Парсер разбирает регексп на правила.
1. 2 буквы или цифры
2. 1 буква или ничего
3. от 1 до 4 цифр
4. 1 буква или ничего
Получаем на вход строчку
ABCD123456
И начинаем проверять. С 1й буквы. ^ буду обозначать на каком месте у нас "курсор" регекспа. Всё что до курсора уже подошло к правилам, всё что после, правилами не проверялось.
^ABCD123456
1. 2 буквы или цифры. AB подходит? Да. Идём дальше.
AB^CD123456
2. 1 буква или ничего. C подходит? Да.
ABC^D123456
3. 1-4 цифры. А у нас D. Не подходит. Откатываемся назад к первому правилу с "вариантами" (где количество символов может меняться)
AB^CD123456
2. 1 буква или ничего. Берём ничего.
AB^CD123456
3. 1-4 цифры. А у нас C. Не подходит. Откатываемся назад до самого начала, больше "ветвящихся" правил у нас не было. Значит наша строка не подошла. Всё, ошибка? Не-а. Отбрасываем первый символ. И начинаем заново.
^BCD123456
1. 2 буквы или цифры. BC подходит? Да. Идём дальше.
BC^D123456
2. 1 буква или ничего. D подходит? Да.
BCD^123456
3. 1-4 цифры. Есть 1234, забираем всё, мы "жадные".
BCD1234^56
4. 1 буква или ничего. 5 как буква не подходит, но как "ничего" вполне.
BCD1234^56
Правила закончились. Значит всё от начала до курсора устроило наше регулярное выражение. Мы "заматчили" BCD1234.
Так понятнее? А теперь, прежде чем говорить что регулярное выражение "не работает", найдите пример, с которым оно работает не так, как вы ожидали.
Спасибо большое. Вам бы вместо нашего Профа надо! Теперь понятно, что можно с этим делать. Очень эффективно работает.