–егул€рные выражени€ PHP.

√де купить линзы в интернете? ѕрисмотреть и заказать на ochkov.net.

–егул€рные выражени€. 2002-07-04
јвтор: јндрей √оловин —траницы: [1]

ƒо последнего времени дл€ мен€ величайщей загадкой и китайской грамотой представл€лись загадочные "регул€рные выражени€" (regular experssions). „то же это такое?

–егул€рные выражени€ - самый мощный инструмент работы со строками, который смогли выдумать современные программисты. — их помощью можно проводить анализ строк, на содержание последовательностей символов, производить замену на основе этой выборки, разбивать строки на массивы и многое другое.

ѕроще всего разобратьс€ с их устройством на примерах. ƒл€ этого можно использовать специальные функции PHP дл€ работы с регул€рными выражени€ми (RE):

ereg(); ereg_replace(); eregi(); ereg_replacei(); split(); 

‘ункции с суффиксом i представл€ют из себ€ аналоги функций без этого суффикса, не чувствтительные к регистру операндов. –ассмотрим, дл€ начала, функцию split().

¬ыгл€дит она так: array split(string pattern, string string, int [limit]);. ќсновным ее параметром €вл€етс€ pattern (шаблон). ¬ нем содержитс€ RE, дл€ поиска в строке string. Ёта функци€ строит массив на основе анализа строки, где разделителем €вл€етс€ строка, заданна€ шаблоном.

ѕринцип работы этой функции на пон€тном €зыке выгл€дит не так уж и страшно: –азбить строку на компоненты (подстроки), соответствующий правилам, описаным в параметре pattern. ѕравило может выгл€деть, например, так: —лова разделены зап€той и любым количеством пробелов, причем пробелов может не быть. Ёто вполне "жизненное" правило. Ќа его основе можно построить массив ключевых слов, содержащихс€ в строке и разделенных зап€тыми, а после зап€той может идти любое количество пробелов (но не об€зательно). “еперь рассмотрим как записать это правило в нотации RE.

, *.  аждый символ в шаблоне важен. ќбратите внимание на пробел между зап€той и звездочкой - это необходимый элемент шаблона. ѕервый символ означает об€зательную зап€тую после слова, а комбинаци€ " *" (помните, что пробел - элемент шаблона) - любое количество пробелов или их отсутствие. «вездочка €вл€етс€ модификатором и говорит, что идущий перед ней символ может встречатьс€ 0 или больше раз.

–ассмотрим, как все это реализовать на PHP с помощью RE:

$str = "test, one, to, sree"; 
$regs = split(", *",$str); 
for ($i = 0; $i <= count($regs)-1; $i++) { 
echo $i," : ",$regs[$i]; 
} 

» результат работы данного кода:

0 : test 1 : one 2 : to 3 : sree 

ѕричем, строка $str может выгл€деть так: "test, one, to, sree", или так: "test,one,to,sree", или так: "test,one,   to, sree". –езультат будет одинаковым.

ѕерейдем к более сложному примеру из жизни. ѕопытаемс€ определить версию браузера из строки $HTTP_USER-AGENT, дл€ Internet Explorer. “ипична€ строка выгл€дит так:

Mozilla/4.0 (compatible; MSIE 4.01; Windows 98) 

—начала попытаемс€ определить правило выборки номера версии обычным €зыком. ѕеред номером версии об€зательно идет комбинаци€ символов "MSIE" и пробел, заканчиваетс€ номер версии точкой с зап€той. ѕросто? “еперь запишем это в терминах RE. MSIE ([^;]+).  ак видите, здесь используютс€ скобки различной конфигурации. „то они означают?  руглые скобки определ€ют тот элемент, который мы ищем в строке (в нашем случае - шаблон номера версии версии).  вадратные - определ€ют набор символов, каждый из которых может составл€ть часть номера версии. ^ - представл€ет собой отрицание. “.е. конструкци€ [^;], в переводе на русский означает "любой символ, кроме точки с зап€той". + после квадратных скобок говорит, что таких символов (отличных от ;) должно быть минимум 1 (или больше).  руглые скобки обозначают границы искомой подстроки. —оответствующа€ шаблону в круглых скобках подстрока сохран€етс€ в специальной переменной. “аким образом RE MSIE ([^;]+) переводитс€ на русский €зык, как "все символы, отличные от точки с зап€той, следующие за набором символов MSIE и пробелом".

Ќо нам необходимо получить номер версии. ƒл€ этого существует функци€ ereg() (или ее регистронезависимый аналог eregi()). ¬ыгл€дит она так: int ereg(string pattern, string string, array [regs]);. ¬ параметре pattern передаетс€ шаблон, в string - строка дл€ разбора, а в параметре regs передаетс€ массив найденых подстрок, соответствующих шаблону в круглых скобках. ѕервый (с индексом 0) элемент массива представл€ет собой подстроку, соответсвующую всему шаблону pattern. ≈сли подстрока, соответствующа€ шаблону pattern не найдена, то возвращаетс€ значение false иначе, количество найденных подстрок.

¬ данном случае вызов этой функции будет выгл€деть так:

ereg("MSIE ([^;]+)",$HTTP_USER_AGENT,$regs); echo "$HTTP_USER_AGENT : $HTTP_USER_AGENT
"; echo "VERSION : $regs[1]"; 

¬от результат работы этого кода:

$HTTP_USER_AGENT : Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) VERSION : 6.0 


јвтор: јндрей √оловин

Ќабор инструментов: https://inforkom-tools.ru/ - магазин автоинструментов.


ѕри перепечатке информации делайте, пожалуйста, ссылку на наш сайт (либо поделитьс€ вконтакте, гугл+ или делитесь в одноклассниках статьЄй). —пасибо!

»сточник: www.wr-script.ru©, 2004-2023г.

ƒелитесь с друзь€ми в соцсет€х. јктивные комментаторы получают свежие скрипты и бесплатные доработки от WR-Script.ru!

¬ернутьс€ к стать€м помощи WEB-мастеру

WR-–°—З—С—В—З–Є–Ї