Здравейте отново в последния урок от поредицата за регулярни изрази.В този урок ще се запознаем общо казано с някои похвати за по-лесно и съкратено писане на регулярни изрази както и някои важни неща,за които не сме споменали в предишните уроци.
Започваме с предефинираните класове от символи:
\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]и други.
Ето и един прост пример за намиране на едно или повече съвпадения с празно пространство в символен стринг:(доста популярен пример)
$pattern='/\s+/'; // това е идентично на /[ \t\n\r\f\v]+/
И още един за намиране на едно или повече съвпадения на цифри от 0 до 9 в символен низ:
$pattern='/\d+/'; // това е идентично на /[0-9]+/
Важно е да се отбележи,че предефинираните класове от своя страна могат да бъдат включвани в класове от символи:
$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", който е един от режимите за които ще споменем след малко)
Ето пример за намиране на съвпадение с букви от кирилицата и латиницата обединени в клас:
$pattern='/[a-zA-Z\p{Cyrillic}]+/u';
Котви("пространствени дупки"):
\A - съвпада с началото на текстов низ
\z - съвпада с края на низ
\b - отговаря на граница на дума (когато е извън клас, вътре означава backspace)
\B - отговаря на място, което не е граница на дума
Тук попадат и метасимволите "
^","
$"
Ето няколко примера:
Резултата със символен низ "size is a word":
size is a word
Важно е да се каже,че ще се намери съвпадение дори и символния низ да започва с шаблона(както е в случая), за който се търси независимо че нямаме някакво пространство в началото.
Резултата със символен низ "heresizeisnotword": here
sizeisnotword
Резултата със символен низ "size is a word, but in filesize not" и шаблон (
\Bsize) : size is a word, but in file
size not
Режими при компилация(флагове):
i(ignorecase) - при съпоставянето на шаблона и символния низ се пренебрегва разликата между малки и големи букви.
x(verbose) - позволява многословните регулярни изрази, които могат да се съставят по-ясно и разбираемо.
s(dotall) - прави така, че метасимвола "
." да пасва с всеки символ,
дори със символа за нов ред.(вижте метасимвола "
." в първи урок)
g(global) - намира всички съвпадения с даден шаблон в символен низ.
m(multiline) - многоредови съвпадения, оказва влияние върху "^" и "$".
и други..
Ето няколко примера(забележете къде се поставят):
Резултат със символен низ "FiLeSiZe" :
FiLeSiZeРезултат със символен низ "word, another word and again word" :
word, another
word and again
wordРезултат със символен низ "word,(нов ред, натиснете enter) another word" :
word,(нов ред)
another wordАми както се казва "Това беше всичко приятели"

.Надявам се да разберете нещата, не са трудни нужно е повечко упражнение и интерес от ваша страна.Въпреки, че това далеч не е всичко за регулярните изрази,тези знания дават добри основи и може да правите по-добри шаблони за каквото и да е било от може би над 50% от тези които са в мрежата.Очаквам да поствате вашите шаблони в
тази тема.