Oracle и регулярни изрази - всичко за ИТ и програмиране
Написано на 03 февруари 2009 г. Публикувано в Oracle
Както вече споменахме, регулярните изрази са предназначени да съответстват на символни низове. Друга и може би малко по-ясна дефиниция гласи, че регулярните изрази са модели, спрямо които се сравняват низове от знаци, за да се види дали символен низ съвпада или отговаря на шаблон. Най-близкият пример или сравнение, което мога да дам, е с помощта на сравнението LIKE, което предлага някаква форма на шаблон или съвпадение на шаблон. Например, ако искаме да намерим символен низ, съдържащ „Deborah“, бихме могли да напишем следната SQL заявка. Тази заявка наистина ще върне всеки низ, който съдържа „Deborah“ навсякъде в текста в символния низ. За да направите бързо подобно сравнение с помощта на регулярен израз, можете да изпълните следната SQL заявка, която съдържа новата функция REGEXP_LIKE. Така че защо искаме да използваме регулярни изрази, вместо просто да използваме сравнението LIKE, с което сме много запознати? Най-вече защото след като започнете да задавате въпроси на високо ниво относно "сходството" на низ с модел, най-вероятно ще завършите с клауза WHERE с множество сравнения "OR" и "LIKE", за да извлечете това, което наистина търсите. С регулярните изрази в повечето случаи можете да напишете само един модел за сравнение. Да вземем предишния пример. Да предположим сега, че искаме да намерим главния герой в романа, Дебора, която също се нарича „Деби“. В този случай можем да променим нашето условие за търсене на текст на LIKE '%Deb%' и да разрешим проблема. Но какво ще се случи в този конкретен роман също се обсъждафинансовото състояние на нашето момиче от висшето общество. Можем да спрем търсенето, като намерим изречения, които съдържат думи като „Дълг“ или „Дебютантка“. Сега имаме много труден проблем. За да сме сигурни, че намираме текст, който е пряко свързан с Дебора, трябва да използваме регулярен израз. Ето SQL заявката, която трябва да изпълните. Сега той намира всички изречения, които говорят за Дебора в романа. Може да се види, че в рамките на модела за съвпадение програмираме варианти на текст, съдържащ „Дебора“ или алтернатива на „Дебора“, използвайки опцията (bieorah) в израза. Това е каноничната форма за конструиране на модел, спрямо който се сравнява низ.
Друг често обезпокоителен проблем е откриването дали има число в низ от текст или проверката дали символен низ е число. За да намерите низ, съдържащ число, което съответства на модел с десетична запетая, можете да използвате този метод. Имайки предвид, че числата, които имат десетична запетая, трябва да имат реално число след десетичната запетая, аз написах '+', за да обознача едно или повече числа. За да получите имена с тежки пръсти, където 'b' може да е въведено повече от 3 пъти; можем да използваме следната заявка Регулярните изрази могат да изглеждат много сложни в началото. Дори ми трябва известно усилие да запомня тези модели, ако не съм ги използвал от известно време. Но след като прекарате известно време в научаване как да ги създавате, ще бъдете възнаградени, когато се сблъскате със сложни критерии за търсене.
И така, къде да научите как да създавате регулярни изрази. Наистина не е толкова трудно, колкото си мислите. Регулярните изрази винаги са били част от света на Unix и затова има многоинформация за тях онлайн. Ръководствата на Oracle включват няколко страници, около 5, които са посветени на регулярните изрази; затова е по-добре да започнете оттук и в особено трудни случаи да се обърнете към мрежата. Можете спокойно да се доверите на Yahoo, Google или любимата ви търсачка за ръководства и уебсайтове, посветени изключително на регулярни изрази.