Отправляет email-рассылки с помощью сервиса Sendsay

Программирование в Web

  Все выпуски  

Программирование в Web Выпуск 26 от 16/09/2007 Основы PHP - Урок-17


 
Программирование в web

ОСНОВЫ PHP
 

 
Внимание!!!
Все материалы уроков, публикуемых в этом и во всех последующих выпусках рассылки «Программирование в web», являются интеллектуальной собственностью авторов и ведущих рассылки. По всем вопросам размещения или публикации данных материалов на собственных ресурсах или где-либо еще, или иного использования, не связанного с личным ознакомлением и самостоятельным обучением, - обращайтесь на адрес автора. Любое использование этих материалов в коммерческих или иных целях, явно не разрешенное автором, является незаконным.
 

 
У Р О К    17
Здравствуйте уважаемые подписчики!

После долгого перерыва, вызванного необходимостью, я снова с вами, но, скорее всего, опять ненадолго. Ничего уж тут не поделать. Приношу за это свои искренние извинения. Надеюсь вы меня поймете правильно и останетесь и дальше со мной.


Итак, последний наш урок был посвящен регулярным выражениям в PHP. Мы рассмотрели сами регулярные выражения, но не изучили функции самого PHP для работы с ними. В этом выпуске мы постараемся восполнить этот пробел и будем рассматривать собственно функции PHP, предназначенные для работы с регулярными выражениями. Именно эти функции позволяют разработчику осуществлять мощный поиск, а также и замену, если это необходимо. Вам может потребоваться что-то проверить, или что-то найти, а возможно заменить что-то на другое. Так, вы можете на входе получить от посетителя какую-то ссылку, обработать ее, а затем, безопасно для вашего проекта, вывести ее в браузер. Или вы можете создать какую-то базу, содержащую перечень файлов для скачивания и затем преобразовывать в ссылки на закачку. Вы можете создать собственную поисковую индексирующую систему, как для собственного сайта, так и для других сайтов. В общем вы сможете дела ть очень много нужного, что придаст популярности вашему проекту, удобству работы с ним и так далее. Все будет зависить только от вашей фантазии и изобретательности. Как уже договорились ранее, рассматривать будем, в основном, работу по стандарту PCRE, а стандарта POSIX коснемся лишь слегка, так как он медленно устаревает, а прогресс не должен стоять на месте. Итак начинаю…



РЕГУЛЯРНЫЕ ВЫРАЖЕНИЯ в PHP (ЧАСТЬ-III-1 — функции):


Поиск по шаблону:

Функция preg_match($expression, $string [, &$pockets]) — Всегда, если явно не задан другой модификатор, работает в многострочном режиме!

Данная функция обрабатывает какую-то определенную строку $string по шаблону, построенному на регулярном выражении $expression, ищет совпадение, и, в случае удачи, возвращает 1 (единицу), а если поиск не дал результатов, то функция вернет 0 (ноль). Сама по себе данная функция хороша именно для поиска и проверки, существует ли в строке что-то похожее на наш шаблон. Но у нее есть и еще одна приятная особенность, которая часто может нам пригодиться. Я говорю о третьем, необязательном, параметре данной функции, - о &$pockets. Данный параметр для функции является внешней-ссылочной переменной (именно по этой причине перед знаком $ (доллар) мы ставим знак & (амперсанда)). Этот параметр представляет из себя массив-список. В каждом элементе этого массива, если поиск был удачным, мы сможем обнаружить все части совпадения. В кармане с индексом 0 (ноль) будет записано все совпадение целиком, а в последующих каждая часть. Допустим если мы проверяем и выделяем e-mail-адрес и разбили наш шаблон на 4 части (примерно так было в нашем примере гостевой книги), то в $pockets[0] окажется весь e-mail-адрес, в $pockets[1] - будет имя почтового ящика до знака @ (собака, лягушка или как хотите) и так далее. Что полезного можно из этого извлечь? Ну, например, вы пожелаете, чтобы адреса электронной почты или web-адреса, введенные пользователем, могли нормально отображаться в виде ссылок, но, при этом, ничуть не портили внешний вид ваших страниц. Это, конечно, можно будет реализовать и по-другому, используя функции поиска и замены по шаблону, о которых мы поговорим чуть позже. Еще один пример - Вам необходимо обрабатывать каждую часть электронного адреса отдельно. Допустим, выделить имена почтовых ящиков из адреса. Или же вы на входе получаете список каких-то файлов и желаете определить к чему каждый из них относится. В обще м, применений можно найти много, была бы хорошо развита фантазия.



Поиск по шаблону и замена:

Функция preg_replace($expression, $to, $string) — Всегда, если явно не задан другой модификатор, работает в однострочном режиме, в противоположность функции preg_match()!

Данная функция принимает в качестве шаблона для поиска и замены регулярное выражение, переданное в параметре $expression и производит поиск совпадений в строке $string и заменяет их на соответствующие подстроки из $to.


Рассмотрим пример практического применения данной функции (возьмите его на вооружение):
<?php
$inputstring="Привет всем подписчикам от manatolick@narod.ru. Пишите мне на адрес: manatolick@lenta.ru!";
$outstring=preg_replace('/(\S+)@([a-zA-Z0-9.]+)/is', '<a href="mailto:$0">$0</a>', $inputstring);
echo $outstring;
?>

Теперь давайте разберем этот пример чуть подробнее. Итак, мы имеем какой-то необработанный текст, в котором, предположительно, могут содержаться e-mail-адреса. Нам необходимо, выделить данные адреса из текста и использовать их затем по своему усмотрению. В данном конкретном примере мы их будем просто отображать как mailto-ссылки. Строим регулярное выражение — '/(\S+)@([a-zA-Z0-9.]+)/is' (не забывайте об ограничителях регулярного выражения, и помещать его вместе с ограничителями в апострофы). Далее ищем в строке $inputstring все электронные адреса и заменяем их на следующую, «таинственную» строку — '<a href="mailto:$0">$0</a>'. Это обычный HTML-тег для обозначения ссылок, а именно тот его вариант, который предназначен для обозначения ссылок на адреса электронной почты. Но есть в этой строке еще кое-что, а именно параметр $0. Эта последова тельность работает внутри функции preg_replace() и является шаблоном для вставки всего совпадения целиком, нечто похожее на карман с индексом 0 (ноль) функции preg_match(). Фактически, это карман и есть. Так, $1 (можно и так — \1)- содержимое кармана с индексом 1 (единица), и так далее. C этим понятно. Теперь вот еще что. Данная функция может иметь еще один необязательный, четвертый, параметр — $limit, он сообщает функции, что надо сделать не более чем $limit поисков и замен.


Три основных параметра функции preg_replace() могут быть не только строчного типа, но и массивами-списками. В этом случае поиск и замена будет производиться с учетом каждого элемента массива. В данном контексте функция preg_replace() очень похожа на функцию str_replace(). Если параметр $string является массивом строк, то замена будет произведена в каждом элементе этого массива и возвращен в качестве результата также массив-список строк. Если параметр $expression массив-список регулярных выражений, а параметр $to строка, то будет произведен поиск по каждому регулярному выражению, а замена будет произведена на фиксированное значение из $to. Ну и наконец, если и $expression и $to массивы-списки, то замена будет производиться попарно, то есть, извлекается очередной элемент из массива-списка $expression и в строке поиска заменяется на такой же по индексу (то бишь парный) элемент из массива-списка $to. Если массив-список $to окажется короче, чем $expression, то есть в $to окажется элементов меньше, чем в $expression, то замена будет произведена на пустую строку.


Как я уже говорил, тема регулярных выражений вообще, а в PHP в частности, достаточно обширна, и в одном уроке ее всю не охватить. В этом уроке мы охватили всего пару самых часто применяемых функций для работы с регулярными выражениями. На самом деле их намного больше. Их мы будем разбирать в последующих выпусках нашей рассылки. Данный выпуск я заканчиваю. Ввиду того, что перерыв между выпусками был достаточно большой, и вы наверняка многое забыли из предыдущих уроков, предлагаю почитать предыдущие выпуски, чтобы легче было понимать этот и последующие. Именно по этой причине я и не делаю данный выпуск полным. Будем считать, что этот урок первая часть темы.


Ну что ж. На этом я заканчиваю данный выпуск. Обещать, что больше таких больших перерывов между выпусками не будет, я не могу. Специфика моей работы такая, что никогда не знаю, где окажусь завтра и сколько времени буду отсутствовать. Так что приношу свои искренние извинения еще раз и на всякий случай заранее тоже. До следующего выпуска.


 

 
Ваши вопросы:
Вопрос от

Новые вопросы пока не поступали…

Ответ ведущего:

Ответов на новые вопросы, пока, соответственно тоже нет…


 

 
Ответы на ваши вопросы:

И в этом разделе пока тоже нет никаких ответов…


 

 
Объявления!!!

Если у вас возникли какие-то вопросы, не стесняйтесь, задавайте. Для этого, всего лишь, пошлите на мой адрес письмо с вопросом и с темой, в которой обязательно укажите какого урока и какого языка касается вопрос. Например, тема может быть такой - «Основы PHP. Урок 10. Вопрос». Также, с такой же темой и на этот же адрес вы можете прислать и свои дополнения к уроку. Если дополнения будут существенными, то в последующих уроках они обязательно будут учтены.

Все свои вопросы, ответы, решения, советы и так далее шлите на мой адрес, с соответствующей темой. Ваши сообщения без темы, я, скорее всего, просто не смогу прочесть по той или иной причине. Если вы будете давать ответ на задачу, в теме также указывайте и номер задачи или номера нескольких задач, на которую или которые даете ответ.

Обо всех замеченных опечатках, ошибках или неточностях прошу также обращаться на мой адрес, все мы люди и все мы можем ошибаться. Однако, не забывайте делать соответствующую пометку в теме ваших сообщений.

Маленькая просьба. Многие из вас присылают мне запросы на отправку им того или иного, не полученного ранее, выпуска рассылки. У меня не всегда есть возможность это сделать. Поэтому предлагаю вам для начала посмотреть нужный выпуск в архиве рассылки. Рассылка выходит сразу на трех рассыльных сервисах, и по некоторым причинам (мне не известным) некоторые сервисы не принимают адресов, в которых встречаются именя конкурирующих рассыльных сервисов, по этой причине я опубликую только одну ссылку на архив рассылки только одного рассыльного сервиса, а именно Content.mail.ru. Вот ссылка на на этот архив рассылки - http://content.mail.ru/pages/p_21931.html. В обще м-то это объявление наверное лишнее, ведь в каждом выпуске каждой рассылки, вне зависимости от того, на каком сервисе она выходит, всегда указан этот самый адрес архива рассылки. На сабскрайб.ру и на контент.мэйл.ру этот адрес указывается в самом низу выпуска, а на мэйллист.ру - в самом верху выпуска. Так что, при достаточном внимании, вы сами легко сможете найти нужную ссылку на архив рассылки.

 

 
Немного смеха не помешает:

******

– Если бы упаковка сыров «Хохланд» была диаметром не 110 мм, а 120 мм, получилась бы шикарная коробочка под CD...


******

– На самом деле, приставка «г-н» к имени в письме не всегда означает "господин".


******

– Табличка перед входом в газовую камеру: «Осторожно, ступенька!»


******

– В детстве Человека-паука часто наказывали и ставили в правый верхний угол.


******

– У меня есть две новости - плохая и хорошая. Плохая — нет хороших новостей, а хорошая — нет плохих.


******

– Желание содержать семью и детей сгубило гораздо больше мужчин, чем алкоголь и путаны вместе взятые.


******

– Чего бы женщинам не стоила их красота, мужчинам будет дороже.


******

– Заключительный проект цикла реалити шоу со звездами — «Звёзды в гробу».


******

– Если бы мат в русском языке заменить смайликами, то наш язык был бы не только самый могучий, но и самый весёлый.


******

– Выпил одновренменно бутылочку Имуннеле и Актимель. Теперь я знаю, что у бифидобактерий тоже есть враждующие группировки.


******

 

 
Внимание!!!
Все материалы уроков, публикуемых в этом и во всех последующих выпусках рассылки «Программирование в web», являются интеллектуальной собственностью авторов и ведущих рассылки. По всем вопросам размещения или публикации данных материалов на собственных ресурсах или где-либо еще, или иного использования, не связанного с личным ознакомлением и самостоятельным обучением, - обращайтесь на адрес автора. Любое использование этих материалов в коммерческих или иных целях, явно не разрешенное автором, является незаконным.
 

 
Наш проект и наши друзья
Автор рассылки — Anatolick
Архив рассылки — http://content.mail.ru/pages/p_21931.html
Сайт проекта — «Russian discussions Zone»
Движок для сайтов — «Tanat-Engine»
Проект Web Help — «Web-Help.int.ru»
Дискуссионный лист — «Все для Всех о РС»
Дискуссионный лист — «File Info Masters»
Дискуссионный лист — «Напряги мозги»
Дискуссионный лист — «Ищем все…»
Дискуссионный лист — «Все обо Всем по Email»
Дискуссионный лист — «Внимание! Розыск…»
Дискуссионный лист — «Английский для Всех и каждого»
Группа стандартизации в Web — W3C.org
 

В избранное