Регулярните изрази наистина са нещо мнооого хубаво и мощно.
Не знам дали ще намериш информация за тях на руски, затова ще ти напиша на български
По принцип регулярният израз представлява шаблон за намиране на съвпадения. Принципът е долу горе същият както при маските когато търсиш файлове (от сорта на *.doc) , но много по мощни
Например:
. (точката) замества всеки символ, било то буква, препинателен знак, празно пространство - всичко
израз a.m ще пасне на всяка от думите: army, atm, mycam
символа ^ означава начало на низа, а символа $ означава край на низа
израз ^mys ще пасне на mysister и mystic, но няма да пасне на rasmys
Има така нар. quantifiers
* (звездичка) означава нула или повече символа като предходния, пред който е поставена
например no*b ще пасне на nob, noooooob и също така ще пасне И на nb
+ (плюсче) означава един или повече символа като предходния, пред който е поставен
? (въпроситлен) означава нула или един символа като предходния пред който е поставен
Едно много чсто използвано съчетание е израза .* в съчетание с нещо определено
В примера който е дал phrozencrew ако забелязваш,, той знае точно текста, който обгражда търсената позиция и намира всичко между div таговете (колкото и дълго да е то)
В израза всичко заградено в скоби, се "запомня" и запазва за последваща употреба и точно това е начина, чрез който се "извлича" намереният текст в рамките на регулярния израз
Например израза am (.*) years приложен към текста
ще даде съвпадение и освен това текста "20" ще се запази в една номерирана променлива или елемент от масив според езика и начина на извличане който използваш
Има обаче едно неприятно нещо: например искаш да извлечеш числото за download.bg от този текст:
download.bg: 134, hit.bg: 128, abv.bg: 120, |
и правиш следният израз: download.bg (.*), с надеждата между скобите да попадне само интересуващото те число, понеже след него ма запетайка. Проблемът е, че съчетанеието точка звездичка - .* е "алчно" и ще ти върне всичко до ПОСЛЕДНАТА срещната запетая, т.е ще се извлече "134, hit.bg: 128, abv.bg: 120", а не само "134", каквото е първоначалното ни намерение. Ето защо се използва съчетанието .*?, което вече не е толкова алчно, а спира при първото срещнато съвпадение. Ама така си е - quantifier-ите са си алчни.
Обикновено регулярният израз се загражда с /, но не е задължително, важното е да има вттори символ означаващ края на границата, която е била посочена с начален символ
например /Hi.*/ е същото като #Hi.*#
Може да се вкарват и разни модификатори, след края на границата - едни буквички, като всяка е с точно определено значение, например дали израза да важи за целият текст, независимо че има нови редове или пък $ значи освен край на низа също и край на ред, или пък дали малките и главните букви да имат значение при претърсването и т.н.
Има още много много възможности, които правят регулярните изрази едно много, ама много мощно средство за претърсване и извличане на информация, това тук са само някои елементарни насоки