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

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

abcd

  • Sr. Member
  • ****
  • Благодарности
  • -Казани: 7
  • -Получени: 21
  • Публикации: 272
Регулярни изрази част 4
« -: 20 Януари 2012, 22:36:45 »
Здравейте отново в последния урок от поредицата за регулярни изрази.В този урок ще се запознаем общо казано с някои похвати за по-лесно и съкратено писане на регулярни изрази както и някои важни неща,за които не сме споменали в предишните уроци.

Започваме с предефинираните класове от символи:

\d - намира съвпадение с всяка десетична цифра - това е еквивалент на класа [0-9]
\D - намира съвпадение с всеки символ, който не е цифра - това е еквивалент на класа [^0-9]
\s - намира съвпадение с всеки празен символ - това е еквивалент на класа [ \t\n\r\f\v]
\S - намира съвпадение с всеки не празен символ - това е еквивалент на класа [^ \t\n\r\f\v]
\w - намира съвпадение с всеки буквеноцифров символ - това е еквивалент на класа [a-zA-Z0-9_]
\W - намира съвпадение с всеки не буквеноцифров символ - това е еквивалент на класа [^a-zA-Z0-9_]
\h - намира съвпадение с шеснадесетична цифра - това е еквивалент на класа [0-9a-fA-F]
\H - намира съвпадение със символ, който не е шеснадесетична цифра -  това е еквивалент на класа [^0-9a-fA-F]

и други.

Ето и един прост пример за намиране на едно или повече съвпадения с празно пространство в символен стринг:(доста популярен пример)

Код: PHP
  1. $pattern='/\s+/'; // това е идентично на /[ \t\n\r\f\v]+/

И още един за намиране на едно или повече съвпадения на цифри от 0 до 9 в символен низ:

Код: PHP
  1. $pattern='/\d+/'; // това е идентично на /[0-9]+/

Важно е да се отбележи,че предефинираните класове от своя страна могат да бъдат включвани в класове от символи:

Код: PHP
  1. $pattern='/[a-z\d]+/'; // това е идентично на /[a-z0-9]+/

POSIX-класове от символи:

[[:alpha:]] - символ от азбука
[[:alnum:]] - горното или цифра
[[:blank:]] - интервал или таб
[[:cntrl:]] - контролен символ
[[:digit:]] - цифра
[[:lower:]] - малка буква
[[:upper:]] - главна буква
[[:print:]] - printable-символ
[[:punct:]] - пунктуационен символ
[[:space:]] - whitespace-символ (вкл. и нов ред)
[[:xdigit:]] - шеснадеситична цифра

Може да видите останалите тук както и на кои класове отговарят.

Символни свойства(character properties):

С конструкцията \p{} може да намирате съвпадение на символи, имащи съответното свойство подобно на POSIX - \p{Alnum}, \p{Alpha}, \p{Blank}, \p{Cntrl}, \p{Digit}, \p{Graph}
Може да проверите дали даден символ е от кирилицата : \p{Cyrillic}, а за всички езици \p{L} (използвайте тези свойства за азбуките с флаг "u", който е един от режимите за които ще споменем след малко)

Ето пример за намиране на съвпадение с букви от кирилицата и латиницата обединени в клас:

Код: PHP
  1. $pattern='/[a-zA-Z\p{Cyrillic}]+/u';

Котви("пространствени дупки"):

\A - съвпада с началото на текстов низ
\z - съвпада с края на низ
\b - отговаря на граница на дума (когато е извън клас, вътре означава backspace)
\B - отговаря на място, което не е граница на дума

Тук попадат и метасимволите "^","$"

Ето няколко примера:

Код: PHP
  1. $pattern='/\bsize\b/';

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

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


Код: PHP
  1. $pattern='/\Bsize\B/';

Резултата със символен низ "heresizeisnotword": heresizeisnotword
Резултата със символен низ "size is a word, but in filesize not" и шаблон (\Bsize) : size is a word, but in filesize not

Режими при компилация(флагове):

i(ignorecase) - при съпоставянето на шаблона и символния низ се пренебрегва разликата между малки и големи букви.
x(verbose) - позволява многословните регулярни изрази, които могат да се съставят по-ясно и разбираемо.
s(dotall) - прави така, че метасимвола "." да пасва с всеки символ, дори със символа за нов ред.(вижте метасимвола "." в първи урок)
g(global) - намира всички съвпадения с даден шаблон в символен низ.
m(multiline) - многоредови съвпадения, оказва влияние върху "^" и "$".

и други..

Ето няколко примера(забележете къде се поставят):

Код: PHP
  1. $pattern='/filesize/i';

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

Код: PHP
  1. $pattern='/word/g';

Резултат със символен низ "word, another word and again word" : word, another word and again word

Код: PHP
  1. $pattern='/.+/s';

Резултат със символен низ "word,(нов ред, натиснете enter) another word" : word,(нов ред) another word

Ами както се казва "Това беше всичко приятели" :).Надявам се да разберете нещата, не са трудни нужно е повечко упражнение и интерес от ваша страна.Въпреки, че това далеч не е всичко за регулярните изрази,тези знания дават добри основи и може да правите по-добри шаблони за каквото и да е било от може би над 50% от тези които са в мрежата.Очаквам да поствате вашите шаблони в тази тема.
« Последна редакция: 30 Януари 2012, 11:52:46 от abcd »