Druzya.org
Возьмемся за руки, Друзья...
 
 
Наши Друзья

Александр Градский
Мемориальный сайт Дольфи. 
				  Светлой памяти детей,
				  погибших  1 июня 2001 года, 
				  а также всем жертвам теракта возле 
				 Тель-Авивского Дельфинариума посвящается...

Библиотека :: Компьютеры и Программирование :: Котеров Д. В. - Самоучитель PHP 4
<<-[Весь Текст]
Страница: из 287
 <<-
 
описанное делает тремя строчками: 
$str = "Hello, this word is bold!"; 
if(ereg("<([[:alnum:]]+)>([^<]*)",$str,$Pockets)) 
echo "Слово '$Pockets[2]' обрамлено тэгом '<$Pockets[1]>'"; 
Дополнительные функции 
bool eregi(string $expr, string $str [,list &$Matches]) 
То же, что и ereg(), только без учета регистра символов. 
Хотя регистр и не учитывается при поиске, в карманах $Matches все найден- 
ные подстроки все же запишутся с точным сохранением регистра букв. 
string eregi_replace(string $expr, strint $str, string $strToChange) 
То же, что и ereg_replace(), но без учета регистра буквенных символов. 

Часть IV. Стандартные функции PHP 308 
int quotemeta(string $str) 
Часто бывает нужно гарантировать, чтобы в какой-то переменной-строке ни один 
символ не мог трактоваться как метасимвол. Этого можно добиться, предварив каж- 

дый из них наклонной чертой, что и делает функция quotemeta(). А именно, она 
"заслэшивает" следующие символы: . , \\, +, *, ? , [ ^ ] , ( $ ). 
Перед | слэш почему-то не ставится. Будьте особо внимательны! 
list split(string $pattern, string $string [,int $limit]) 
Эта функция очень похожа на explode(). Она тоже разбивает строку $string на 
части, но делает это, руководствуясь регулярным выражением $pattern. А именно, 
те участки строки, которые совпадают с этим выражением, и будут служить 
раздели- 
телями. Параметр $limit, если он задан, имеет то же самое значение, что и в 
функ- 
ции explode() — а именно, возвращается список из не более чем $limit элемен- 
тов, последний из которых содержит участок строки от ($limit-1)-го совпадения 
до 
конца строки. 
Наверное, вы уже догадались, что функция split() работает гораздо медленнее, 
чем 
explode(). Однако она, вместе с тем, имеет впечатляющие возможности, в чем мы 
очень скоро убедимся. Тем не менее, не стоит применять split() там, где 
прекрасно 
подойдет explode(). Чаще всего этим грешат программисты, имеющие некоторый 
опыт работы с Perl, потому что в Perl для разбиения строки на составляющие есть 

только функция split(). 
list spliti(string $pattern, string $string [,int $limit]) 
Аналог функции split(), который делает то же самое, только при сопоставлении с 
регулярным выражением не учитывается регистр символов. 
Примеры использования 
регулярных выражений 
Какая же книга, описывающая (даже вкратце) регулярные выражения, обходится без 
примеров…. Я не буду отступать от установленных канонов, хотя, конечно, понимаю,
 
что истинная свобода при работе с выражениями достигается только практикой. Не- 

которые из следующих ниже примеров выглядят довольно сложно, но, если разо- 
браться, смысл чаще всего оказывается на поверхности. 
Имя и расширение файла 
Задача: для имени файла в $fname установить расширение out независимо от его 
предыдущего расширения. 

Глава 22. Основы регулярных выражений в формате RegEx 309 
Решение: 
$fname=ereg_Replace( 
'([[:alnum:]])(\\.[[:alnum:].]*)?$', 
'\\1.out', 
$fname 
); 
Обратите внимание на довольно интересную структуру этого выражения: мы не мо- 
жем просто "привязать" его к концу строки при помощи $, что обусловлено 
специфи- 
кой работы RegEx. Мы также привязываем начало выражения к любой букве или 
цифре, которой оканчивается имя файла. 
Имя каталога и файла 
Цель: разбить полное имя файла $path на имя каталога $dir и и имя файла $fname. 

Средства: 
$fname = ereg_Replace(".*[\\/]","",$path); 
$dir = ereg_Replace("[\\/]?[^\\/]*$","",$path); 
Проверка на идентификатор 
Задача: проверить, является ли строка $id идентификатором, т. е. состоит ли она 
ис- 
ключительно из алфавитно-цифровых символов (чтобы сделать задачу более инте- 
ресной, договоримся также, что первым символом строки не может быть цифра). 
Решение: 
if(eregi("[a-z_][[:alnum:]]*",$id)) echo "Это идентификатор!"; 
Модификация тэгов 
Задача: в тексте, заданном в $text, у всех тэгов  заменить в src 
расширение 
файла рисунка на gif, вне зависимости от того, какое расширение было у него до 
этого и было ли вообще. 
Решение: 
$text=eregi_Replace( 
'(]*src="?[[:alnum:]/\\]*)(\\.[[:alnum:]]*)?', 
'\\
 
<<-[Весь Текст]
Страница: из 287
 <<-