Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Проверить формат varchar. my SQL

21.06.21 20:45
Re: Проверить формат varchar. my SQL
 
melodi_ постоялец

Как упрощённо представить себе работу жадного (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.

Так понятнее? А теперь, прежде чем говорить что регулярное выражение "не работает", найдите пример, с которым оно работает не так, как вы ожидали.


Спасибо большое. Вам бы вместо нашего Профа надо! Теперь понятно, что можно с этим делать. Очень эффективно работает.

 

Перейти на