Какво е регулярен израз?
Регулярните изрази
- са усъвършенствана система от шаблони
- спомагат писането на по-добри програми и спестяват време
- са ключ за по-гъвкаво и по-ефективно обработване на текста.Могат да бъдат толкова прости, колкото командите за търсене в текстовите редактори, но могат да бъдат и мощни като език за обработване на текст.
Откриването на текст е едно от най-елементарните приложения на регулярните изрази. Първо се пише шаблона, след това с помощта на вградените функции в РНР той се превръща в стринг.
В РНР има две групи функции, използващи регулярните изрази за съпоставяне със шаблони и две за намиране на съответствие между шаблоните и замяна на един текст с друг. И в двете групи една от функциите реагира на регистрите, другата- не.
Някои текстови редактори позволяват използването на регулярни изрази за откриване на фрагменти от текст, които в последствие да се заменят.
Синтаксис на регулярните изрази
- Литерали
- Метасимволи
- Класове
- Ограничители
- Модификатори
- Подшаблон
- Таблица с метасимволите
- Генератори на регулярни изрази
Преди да приложим вградените функции за регулярните изрази в РНР, е необходимо да създадем шаблон, който ще се използва от функциите за търсене на съвпадение. В РНР има много правила за създаване на шаблони. Тези правила могат да се използват поотделно или в комбинация за създаване както на прости, така и на сложни шаблони.
За да разберем как се създават шаблони, ще анализираме специалните символи, които се използват за тази цел. Шаблонът е комбинация от символи, групи и класове.
Литерали
Метасимволи
Те са по-сложна структура от литералите. Това са специални символи, имащи по-широко значение.
Ако «а» означава точно «а» , то първият метасимвол точка (.) може да се отъждестви с произволен отделен символ (а, 1, % и т.н. ). Достатъчно е да обърнете внимание на следното: ако искате да използвате метасимвола буквално, необходимо е да го екранирате. Например, на точката, която пишем в текст (препинателен знак точка), ще съответства символа «\.».
Записът «а*» ни позволява да открием нула или произволен брой букви «а» (а, аа, ааа и т.н.).
Записът «а+» ни позволява да открием една или повече букви «а» (а, аа, ааа и т.н.), но поне една трябва да има.
Записът «а?» ни позволява да открием нула или една буква «а».
Метасимволите, за които говорихме по-горе (*, +, ?) позволяват да се “размножат” стоящите пред тях изрази и понякога се наричат символи-умножители.
За да открием определено количество от една и съща буква е необходимо да използваме фигурни скоби ({}) , в които да укажем или конкретно число, или минимум, или минимум и максимум. Например «а{3}» ще съответства само на «ааа» ; «а{3,}» - ааа, аааа и т.н. (три или повече букви «а»); «a{3,5}» - ааа, аааа и ааааа (между три и пет букви включително).
Метасимволът caret (^) ще съответства на стринг, започващ от следващата след знака буква. Този знак може условно да се представи като псевдосимвол, с който започва всеки стринг.
Метасимволът ($) се отъждествява със стринг, който завършва на предшестващата този символ буква. Той може да се представи като последен символ в стриг, обозначаващ преход на нов стринг. Следователно, записът ^а. ще съответства на стритг от два символа, започващ с буквата «а» , а записът .a$ ще съответства на стринг от два символа, завършващ на буквата «а». Следователно записът ^а$ ще съответства на стринг, състоящ се само от буквата «а» и се явява еквивалент на литерала «а».
В регулярните изрази съществува и знакът (|) като еквивалент на думата «или» . Следователно, записът Edelw|Butterfly ще съответства на стринга Edelw или на стринга Butterfly. Такива комбинации се наричат редуване (alternation), а отделните подизрази се наричат алтернатива/избор (alternatives).
Записът gr[ea]y ще се отъждестви с двата варианта на изписване на името на цвят (на английски grey и gray означават сив), може да се запише като gray|grey или gr(a|e)y.
Примерите по-горе онагледяват как работят метасимволите.
Класове
Записът
<H[123456]>
ще открие съвпаденията
<H1>, <H2>, <H3> и т.н..
Това може да ни е полезно при търсене в HTML хедърите.
Метасимволът '-' (dash) указва диапазон от знаци, т.е. записът
<H[1-6]>
е идентичен на предишния пример.
Записът
[0123456789abcdefABCDEF]
може да се запише като
[0-9a-fA-F]
и един от тези записи може да е полезен, когато се разглеждат шестнадесетични числа.
Можем да направим комбинация с литерали, например: [0-9A-Z_!.?] търси съвпадения с числата, главните букви, знака за подчертаване, знак удивителен, точка и знак въпросителен.
Запомнете, че dash е метасимвол, единствено в класа, в противен случай той е обикновеният знак тире. Ако е в началото на класа, също няма да се разглежда като метасимвол.
Ограничители
Повече за ограничителите:
http://php.net/manual/en/regexp.reference.delimiters.php
Модификатори
Списък на модификаторите можете да откриете на адрес:
http://php.net/manual/en/reference.pcre.pattern.modifiers.php
Подшаблони
Подшаблона съдържа алтернативи. Например шаблона
кон(струкция|катенация)
може да открие двете думи: конструкция и конкатенация.
Повече за подшаблоните:
http://php.net/manual/en/regexp.reference.subpatterns.php
Таблица с метасимволите

Половината от битката, когато пишем регулярни изрази, е да получим необходимите ни съвпадения, когато и където искаме. Другата половина е да няма съвпадения, когато и където искаме.
RegexMagic: http://www.regexmagic.com/
RegexBuddy: http://www.regexbuddy.com/ и
http://www.regexbuddy.com/wine.html
RegExr Desktop: http://regexr.com/
|
|
Няма коментари:
Публикуване на коментар