Автор Тема: Регулярни изрази част 2  (Прочетена 8985 пъти)

0 Потребители и 1 Гост преглежда(т) тази тема.

Stan

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 27
  • -Получени: 135
  • Публикации: 641
Регулярни изрази част 2
« -: 19 Януари 2012, 13:07:49 »
Здравейте отново във втората част от уроците за регулярни изрази.В предишния урок се запознахме с някои метасимволи и какво значение имат те:
^ $ . * + ? { } 
В този урок ще се запознаем и с останалите метасимволи както и ще си разширим знанията за вече научините.
Започваме с метасимвола "|"(pipe, тръба) който има значение на "или" (както || при PHP) :

Код: PHP
  1. $pattern='/a|b/';

Резултат със символен низ "a" : a
Резултат със символен низ "b" : b
Резултат със символен низ "ab" : ab

Важно е да се отбележи, че трябва да се внимава с употребата на този метасимвол.Той разделя шаблона ни логически на два отделни(или повече ако го употребим повече от веднъж).Какво имам предвид - нека да съставим един шаблон с който оказваме, че символния низ трябва да започва и завършва или със символ "a" или със символ "b" :

Код: PHP
  1. $pattern='/^a|b$/';

Резултат със символен низ "ab" : ab
Резултат със символен низ "cb" : cb

Защо намери съвпадения като изрично сме му казали на символния низ да започва забележете и да завършва със един от посочените символи ? - Ами, защото както казах по-горе метасимвола разделя шаблона ни на два отделни, тоест в нашия пример имаме два шаблона. (1 -"^a",2-"b$") За да формираме правилно логиката на нашето правило то може да изпозлваме групи, но за тях по-късно. Най-простия начин е следния :

Код: PHP
  1. $pattern='/^a$|^b$/';


Резултат със символен низ "a" : a
Резултат със символен низ "b" : b
Резултат със символен низ "ab" : ab
Резултат със символен низ "cb" : cb

Следващия метасимвол, с който ще се запознаем е "[" .Какво прави той ? - Ами използва се за образуване на клас.(структура, в която има набор от символи, които искаме да използваме за съвпадение)

Ето един прост пример:

Код: PHP
  1. $pattern='/[abcd]/';


Резултат със символен низ "a" : a
Резултат със символен низ "b" : b
Резултат със символен низ "c" : c
Резултат със символен низ "d" : d

Какво казваме с този клас - ами да намери съвпадение със символ "a" или "b" или "c" или "d".
Ето друг пример с вече наученият от предишния урок метасимвол - "+"

Код: PHP
  1. $pattern='/[abcd]+/';

Резултат със символен низ "abc" : abc
Резултат със символен низ "bcd" : bcd
Резултат със символен низ "abcd" : abcd

Освен, че можем да съставяме индивидуални(произволни) символи, то можем да оказваме и диапазон от символи,като той се обозначава с два символа и "-"(тире) между тях:

Код: PHP
  1. $pattern='/[a-d]/'; //идентично на /[abcd]/
  2. $pattern='/[0-5]/'; //идентично на /[012345]/

Важно е да се отбележи, че в случая символа "-" има някакво значение(не е обикновен символ в класа).Ако искаме да го изпозлваме просто като символ в класа то можем да го поставим в началото на класа или в края,така "разрушаваме" конструкцията на диапазон и той остава обикновен символ.(има още един начин, но за него по-късно)

Код: PHP
  1. $pattern='/[а-c]/'; // търси съвпадение на обикновен символ "a" или "b" или "c"
  2. $pattern='/[-аc]/'; // търси съвпадение на обикновен символ "-" или "a" или "c"

Тук е мястото да се спомене, че метасимвола "^" от предишния урок,който оказва началото на
символен низ,когато е поставен точно на първо място(в началото) на класа има значение на
отрицание.Ако е поставен на второ място или друго произволно,се превръща в обикновен символ.

Код: PHP
  1. $pattern='/[^а-c]/'; // търси съвпадение със символ различен от "a" или "b" или "c";
  2. $pattern2='/[а-c^]/'; // търси съвпадение със символ "a" или "b" или "c" или "^";


Резултата с $pattern и символен низ "abcd" : abcd
Резултата с $pattern2 и символен низ "sd^" : sd^

Тъй като урока взе да става по-голям, ще поговорим за още един метасимвол и ще продължим в
следващия.

Последния метасимвол за този урок е "\".(backslash,обратно наклонена черта)С този метасимвол ние можем да "екранираме"(escape-ваме) други специални символи.(метасимволи)

Ето пример как можем по друг начин да разрушим конструкцията на диапазон в клас:

Код: PHP
  1. $pattern='/[a\-d]/'; // търси съвпадение със символ "a" или "-" или "d"

Друг пример, в който премахваме специалното значение на метасимвола "+"

Код: PHP
  1. $pattern='/a\+/';// търси съвпадение със символен низ "а+"

Резултат със символен низ "а+" : а+
Резултат със символен низ "ааа" : ааа

Това екраниране важи и за другите специални символи.Ако искаме да екранираме и самия метасимвол "\" отговарящ за това действие просто слагаме допълнителен такъв - "\\".

Код: PHP
  1. $pattern='/\\/';// търси съвпадение със обикновен символ "\"

Резултат със символен низ "\" : \
Резултат със символен низ "a" : a

Това е засега поупражнявайте се с тези примери,като може да ги усложните за да ги разберете по-добре.

--> Към следващия урок.
« Последна редакция: 30 Юли 2012, 14:00:37 от Stan »

georgirgeorgiev

  • Full Member
  • ***
  • Благодарности
  • -Казани: 77
  • -Получени: 13
  • Публикации: 164
Re: Регулярни изрази част 2
« Отговор #1 -: 25 Април 2015, 14:21:39 »
Благодаря Ви много и за този урок. Много добре сте направили уроците до момента, които изгледах за регулярни изрази.

БОГ да ви благослови.