Здравейте отново във втората част от уроците за регулярни изрази.В предишния урок се запознахме с някои метасимволи и какво значение имат те:
^ $ . * + ? { } В този урок ще се запознаем и с останалите метасимволи както и ще си разширим знанията за вече научините.
Започваме с метасимвола "
|"(
pipe, тръба) който има значение на "или" (както || при PHP) :
Резултат със символен низ "a" :
aРезултат със символен низ "b" :
bРезултат със символен низ "ab" :
ab
Важно е да се отбележи, че трябва да се внимава с употребата на този метасимвол.Той разделя шаблона ни логически на два отделни(или повече ако го употребим повече от веднъж).Какво имам предвид - нека да съставим един шаблон с който оказваме, че символния низ трябва да започва и завършва или със символ "a" или със символ "b" :
Резултат със символен низ "ab" :
ab
Резултат със символен низ "cb" : c
bЗащо намери съвпадения като изрично сме му казали на символния низ да започва забележете
и да завършва със един от посочените символи ? - Ами, защото както казах по-горе метасимвола разделя шаблона ни на два отделни, тоест в нашия пример имаме два шаблона. (1 -"^a",2-"b$") За да формираме правилно логиката на нашето правило то може да изпозлваме групи, но за тях по-късно. Най-простия начин е следния :
Резултат със символен низ "a" :
aРезултат със символен низ "b" :
bРезултат със символен низ "ab" : ab
Резултат със символен низ "cb" : cb
Следващия метасимвол, с който ще се запознаем е "
[" .Какво прави той ? - Ами използва се за образуване на клас.(структура, в която има набор от символи, които искаме да използваме за съвпадение)
Ето един прост пример:
Резултат със символен низ "a" :
aРезултат със символен низ "b" :
bРезултат със символен низ "c" :
cРезултат със символен низ "d" :
dКакво казваме с този клас - ами да намери съвпадение със символ "a" или "b" или "c" или "d".
Ето друг пример с вече наученият от предишния урок метасимвол - "+"
Резултат със символен низ "abc" :
abcРезултат със символен низ "bcd" :
bcdРезултат със символен низ "abcd" :
abcdОсвен, че можем да съставяме индивидуални(произволни) символи, то можем да оказваме и диапазон от символи,като той се обозначава с два символа и "
-"(тире) между тях:
$pattern='/[a-d]/'; //идентично на /[abcd]/
$pattern='/[0-5]/'; //идентично на /[012345]/
Важно е да се отбележи, че в случая символа "-" има някакво значение(не е обикновен символ в класа).Ако искаме да го изпозлваме просто като символ в класа то можем да го поставим в началото на класа или в края,така "разрушаваме" конструкцията на диапазон и той остава обикновен символ.(има още един начин, но за него по-късно)
$pattern='/[а-c]/'; // търси съвпадение на обикновен символ "a" или "b" или "c"
$pattern='/[-аc]/'; // търси съвпадение на обикновен символ "-" или "a" или "c"
Тук е мястото да се спомене, че метасимвола "
^" от предишния урок,който оказва началото на
символен низ,когато е поставен точно на първо място(в началото) на класа има значение на
отрицание.Ако е поставен на второ място или друго произволно,се превръща в обикновен символ.
$pattern='/[^а-c]/'; // търси съвпадение със символ различен от "a" или "b" или "c";
$pattern2='/[а-c^]/'; // търси съвпадение със символ "a" или "b" или "c" или "^";
Резултата с $pattern и символен низ "abcd" : abc
dРезултата с $pattern2 и символен низ "sd^" : sd
^Тъй като урока взе да става по-голям, ще поговорим за още един метасимвол и ще продължим в
следващия.
Последния метасимвол за този урок е "
\".(
backslash,обратно наклонена черта)С този метасимвол ние можем да "екранираме"(escape-ваме) други специални символи.(метасимволи)
Ето пример как можем по друг начин да разрушим конструкцията на диапазон в клас:
$pattern='/[a\-d]/'; // търси съвпадение със символ "a" или "-" или "d"
Друг пример, в който премахваме специалното значение на метасимвола "+"
$pattern='/a\+/';// търси съвпадение със символен низ "а+"
Резултат със символен низ "а+" :
а+Резултат със символен низ "ааа" : ааа
Това екраниране важи и за другите специални символи.Ако искаме да екранираме и самия метасимвол "
\" отговарящ за това действие просто слагаме допълнителен такъв - "
\\".
$pattern='/\\/';// търси съвпадение със обикновен символ "\"
Резултат със символен низ "\" :
\Резултат със символен низ "a" : a
Това е засега поупражнявайте се с тези примери,като може да ги усложните за да ги разберете по-добре.
--> Към следващия урок.