СТАТИИ

`начало`статии`


Регулярни изрази

Регулярните изрази или regular expressions са мощен механизъм за търсене, сортиране или валидиране на данни. Ето накратко правилата...


Учудващо прост синтаксис дава голяма сила и свобода при работата със стрингове. Нарича се "регулярни изрази" (regular expressions). С него могат да се търсят конкретни думи в текст, да се търси споменаване на израз или просто да се валидира някакви данни, въведени от потребител. На пръв поглед изглежда трудно, но като се заиграете, определено ще ви хареса.

Регулярните изрази имат малко правила и една поредица от служебни символи, с които се дефинират границите на търсения низ. Регулярните изрази се затварят в ограничители, в PHP най-често с права наклонена - "/".

Начало и край

За начало е "^", а за край "$".

пример:
/^Asterix/ - това означава, че търсим низ, който започва с думата Asterix.
/дизайн$/ - търсим текстов низ, в който последните символи да са дизайн.
/ретуш/ - търсим низ, съдържащ думата ретуш.
/^портфолио$/ - търсим низ, който е точно "портфолио" и нищо друго.

Брой на символи

Брой на символите се дефинират със следните знаци - "*"- нула или повече,"+"- един или повече и "?"- нула или веднъж. Бройката също може да се окаже и в къдрави скоби.

пример:
/аб*/ - търсим низ, започващ с а и след него може да няма нищо или да има "б", неограничен брой пъти. На такова търсене ще отговорят а,аб,абб,аббб и т.н.
/аб+/ - тази заявка ще хване низ аб, където б ще присъства поне веднъж. Аб, абб, аббб, абббб и т.н. Плюсът изключва самостоятелното а.
/аб?/ - задължително а и възможно б. Може да бъде а или аб.
/а?б+$/ - възможно а и поне едно б в края на низа. аб,б,абб,бб,ббб,аббб и т.н.
/аб{2}/ - едно а и точно 2 б. Абб.
/аб{2,}/ - едно а и поне 2 б. Абб, абббб, аббббб и т.н.
/аб{3,5}/ - едно а и б трябва да е между 3 и 5 пъти. Аббб, абббб, аббббб.

При условие, че използвате къдрави скоби, първата стойност винаги трябва да се въвежда. Изразът {,3} е неправилен. Трябва задължително да има нулата - {0,3}.

Дефиниране на низове и множества

Когато специален символ трябва да се отнася за повече от един символ в низ, то те се ограждат в скоби. Скобите се използат и за разделител на действия. Два варианта на поредица от символи се разделя от "|". Точката е специален символ за единичен символ в низ.В квадратни скоби се дефинира множество на възможни символи.

примери:
/а(бв)*/ - низ, в който има а и съчетанието бв може да го няма или да се среща един или повече пъти. А,абв,абвбв,абвбвбв и т.н.
/а(бв){1,5}/ - Веднъж а и низът бв от веднъж до 5 пъти.Абв, абвбв,абвбвбв и т.н.
/мерси|благодаря/ -низове, които съдържат "мерси" или "благодаря".
(в|из)карвам - това хваща низове, съдържащи "вкарвам" и "изкарвам".
(а|б)*в - Низ, съдържащ подниз с "а","б" или нито едно от двете и завършва на в. "А" или "б" могат да се срещат от 0 до безкрай пъти.Ав,бв,в,аав,бббв,бв,бббббв и т.н.
/а.[0-9]/ - Буква а и един символ след нея, който може да бъде число от 0 до 9. А1,а2,а3 и т.н.
/^.{3}$/ - низ от точно три символа.
/[аб]/ - Това изначава, че може да е или "а" или "б". Равносилно е на а|б.
/.[1-8]/ - Може да е символ от 1 до 8.
/^[a-zA-Z]/ - Низът започва с буква. Може да е малка или голяма.

Символът за начало "^", когато е в квадратни скоби показване нежелани символи.

примери:
/.[^a-zA-z]%/ - Символът преди знакът за процент трябва да не е буква.

Ако търсен от вас символ съвпада със специален такъв, то може да избегнете специалното му значение като напишете пред него "\".

примери:
/\$.[1-5]/ - Символ за долар, следван от число от едно до пет.

Заключение

Показаните примери са лесни, за да онагледят идеята. След като принципът е ясен може да се генерират много сложни регулярни изрази - според нуждите ви.

Ето един такъв пример:
/^[a-zA-Z]{1}[a-zA-Z0-9_\-\.]*@[a-zA-Z0-9\-]*\.[a-zA-Z]{2,4}$/
Това трябва да се чете така: Първият символ трябва да е буква. След него следват произволен брой символи, които могат да бъдат букви, числа, тире, подчертаващо тире или точка.След тях има символ @. Следват неограничен букви, цифри или тире. Точка и още 2 или 4 символа, които са букви. Този израз прави проверка за валидност на пощенска кутия. Разбира се, той е един от многото варианти, но в случая е написан, за да се покажат принципите на писане на регулярните изрази.


Коментари

Данчо
Страхотна информация. Добре обяснено, с много примери, точно като за хора като мен (нямащи си понятие от регулярни изрази). Благодаря ти много!
Nasko
Mnogo dobra statiq!Bravo !
Владимир
От това имах нужда. Много мерси! :)
Николай
А как се задава знака интервал?
Петър Найденов
Николай -> Мисля, че тук има значение къде използваш регулярните изрази. В PHP може да го запишеш с квадратни скоби и интервал между тях - [ ]. Някой използват [[:space:]], но това включва всякакви видове интарвали -\t,\r,\n. В някои UNIX системи може да го запишеш като \ , което е чертата за специален символ и интервал. Потърси информация за конкретната имплементация, която ти трябва.
 
2000-2018© Asterixworks.com.Всички права запазени.