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

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

  Все выпуски  

Программирование в Web Выпуск 22 от 14/04/2007 Основы PHP - Урок-15


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

ОСНОВЫ PHP
 

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

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

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



РЕГУЛЯРНЫЕ ВЫРАЖЕНИЯ в PHP (ЧАСТЬ-I):

В PHP поддерживается два стандарта регулярных выражений, для работы с ними используются различные функции. Один из стандартов - POSIX - portable operating system interface, другой - PCRE - perl compatible regular expression. Первый несколько более медлительный на большинстве операций, менее гибкий и постепенно отмирающий, второй - PCRE - намного более гибкий, мощный, на большинстве операций работает быстрее. По этой причине мы будем говорить в основном только о нем, о PCRE, а функции стандарта POSIX затронем лишь вскользь.


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

$correct_email='/^([a-zA-Z0-9_.-]+)@([a-zA-Z0-9_.-]+)([.]{1})([a-zA-Z0-9]{2,4})$/is';.

Здесь переменной $correct_email мы присваиваем регулярное выражение, которое будем использовать в качестве шаблона для определения корректности записанного адреса электронной почты. Соответственно само выражение выглядит так -
/^([a-zA-Z0-9_.-]+)@([a-zA-Z0-9_.-]+)([.]{1})([a-zA-Z0-9]{2,4})$/is.


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


Теперь будем разбирать регулярное выражение чуть более подробно. Начну вот с чего. Любое регулярное выражение - это строка символов, и к нему справедливы все те же требования, что и к любой другой строке. То есть, оно, регулярное выражение, должно обязательно быть заключено либо в кавычки, либо в апострофы. Лучше всего использовать именно апострофы, так как в самом регулярном выражении могут попадаться специальные символы, действие которых вне апострофов может интерпретироваться PHP как какое-то специальное выражение, например имя переменной или еще что-то. Но и это не все. Само регулярное выражение (не строка, а именно регулярное выражение) всегда должно обрамляться парными символами. Как правило в любой литературе по регулярным выражениям, в качестве ограничителей регулярных выражений, используются символы обратного слэша (обратной косой черты - «»). Но на самом деле, для ограничени я регулярного выражения в PCRE можно использовать любые другие неалфавитно-цифровые символы. Это может быть и знак хэш - «#» и символ вертикальной черты - «|», и многие другие, главное требование, что символы должны быть одинаковыми как в начале выражения, так и в его конце, то есть, если первый ограничитель - это решетка, то и закрывающий ограничитель должен быть решеткой, но, при использовании скобок, первый и последний ограничитель должны быть парными, то есть, открывает открывающая скобка и закрывает закрывающая. Использование скобок часто бывает очень удобно, но иногда в них можно и запутаться, поэтому пользуйтесь этим разумно.


Теперь мы уже знаем, что регулярное выражение вот этот кусочек строки -

^([a-zA-Z0-9_.-]+)@([a-zA-Z0-9_.-]+)([.]{1})([a-zA-Z0-9]{2,4})$.

Видно, что выражение состоит как-бы из нескольких частей (а именно так оно и есть), ограниченных скобками. Давайте рассмотрим каждую часть подробнее.


[a-zA-Z0-9_.-] - Буквально означает, что шаблон должен совпасть с любым символом из диапазонов от a до z, от A до Z, от 0 до 9, либо со знаком подчеркивания, либо с точкой, либо с дефисом. Конечно можно было бы указать все эти символы, но согласитесь, что такая запись будет выглядеть короче и понятнее. Здесь надо указать, что если вы ищите совпадение не со всем диапазоном, а только с некоторыми символами, то можно указывать и вот так - [abr-zA-CP-X1-3]. Данный блок мог бы совпасть не слюбым символом алфавита и не с любой цифрой, а только с теми, которые указаны (в том числе и внутри диапазонов), то есть это может быть и символB.

Следующий непосредственно сразу за закрывающей квадратной скобкой знак плюса - «+» сообщает интерпретатору, что символы из указанного диапазона должны встретиться один или больше раз. То есть, как минимум один символ должен быть. Здесь стоит заметить, что символы из диапазона, если их несколько, вовсе не обязательно должны быть одинаковыми. Данный шаблон легко может совпасть со строкой «Ghost». Данный блок шаблона мы ограничели в круглые скобки, чтобы отделить его от других частей шаблона для большей понятности записи.


Итак, закрыли первый блок шаблона и теперь указываем очередной символ, с которым должен совпасть наш шаблон, а именно с символом«@». В электронном адресе он должен встретиться лишь однажды.


Следом идет блок шаблона, который должен совпасть с именем домена (второго, третьего и так далее уровней), а следом за ним точка в квадратных скобках. То есть, так мы показали, что и точка, хотя бы одна, но обязательно должна присутствовать в имени почтового домена, ведь трудно найти электронный адрес, в котором имя почтового домена состояло бы только из одной части. Интерес в данном случае для нас представляет следующие за закрывающей квадратной скобкой цифра 1 внутри фигурных скобок. В данном случае это именно и означает, что символ из диапазона внутри квадратных скобок должен всретиться лишь однажды, но обязательно должен быть, иначе совпадения найдено не будет. Это не исключает присутствия точек впредыдущем блоке совпадения, именно для этого мы и разбиваем шаблон на несколько частей, чтобы сделать его гибче. Ну и в конце мы снова используем почти тот же набор символов, за исключением дефиса, знака подчерки вания и точки (цифры учтены на всякий случай, может окажется домен первого уровня с именем ru1). следом в фигурных скобках указано сколько минимум и сколько максимум должно быть символов в найденом совпадении, то есть, в имени домена первого уровня не может быть меньше двух символов и не может быть больше четырех. Вспомните - .ru, .de, .ua, .com, .net, .biz, .by, .info…


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


Символы is за закрывающим ограничителем регулярного выражения означают, что поиск совпадений должен производиться без учета регистра символов (символ i) и в однострочном варианте (символ s). Последнее нужно для правильно работы функций поиска и замены по шаблонам из регулярных выражений. Об этом я расскажу подробнее в следующих частях. Есть функции, которые изначально производят поиск совпадений в многострочном варианте (строковая переменная в PHP, как вы помните, может содержать несколько строк), а некоторые - в однострочном, и по этой причине стоит явно указывать, и чтобы самому не запутаться, и чтобы гарантировано заставить функции работать так, как надо, конкретный режим поиска.


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


На этом данный выпуск заканчиваю. Еще раз приношу свои искренние извинения за длительные паузы. До следующего выпуска.


 

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

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

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

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


 

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

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


 

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

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

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

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

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

 

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

******

– Хочешь попасть в Америку?
– Вступай в ракетные войска стратегического назначения!


******

У Маринки муж - дебил,
Нинкин - шубу не купил,
Светкин - очень много пьёт,
Машкин - с Машкой не живёт,
Катькин - вечно на работе,
Зинкин - отрастил животик,
Ольгин - помнится, храпит,
Ленкин - с секретаршей спит,
Алкин муж влюбился в Галку,
Галкин - алкоголик жалкий,
Инкин - слишком волосатый,
Веркин - в пятый раз женатый,
Дуськин - платит алименты,
Лизкин - неинтеллигентный,
Жанкин - ходит в казино,
Леркин - с ней не спит давно,
Сонькин муж - красив, но туп,
Анжелинкин - жутко груб,
Вероникин - не богат,
Клавкин - к маме съехал, гад.
Сердце лифчик рвёт на части:
Есть у всех семья и счастье!
Есть у всех моих подруг
Нежный муж, любимый друг...
Жизнь должна быть справедливой:
Выйди замуж, стань счастливой!!!


******

– Пошел терминатор в баню, роняет мыло, наклоняется за ним. Вдруг сообщение системы: «Обнаружено новое устройство».


******

– Ученые США создали супер-интелектуальную бомбу. Осталось придумать как выпихнуть ее из самолета.


******

– Купили как-то для милиции новинку - робота-ловца воров. Через 15 минут после ввода в эксплуатацию робот был украден.


******

– Русская ведущая на украинском концерте. Задумчиво глядит в список концертных номеров. С недоумением: «Весела писенька?!»


******

– Встречает лохнесское чудовище снежного человека и говорит: «Зря мы, Чебурашка, столько анаболиков вкололи».


******

– Почему они называются «Свидетели Иеговы»?
– Потому, что меньше двух никогда не ходят.


******

– Если вы вывихнули ногу - не расстраивайтесь, приложите к ней чернобыльский подорожник, снимите - всё, рентген готов!


******

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


******

– Эстонцы изобрели новый вид секса –Секс по переписке!


******

– Как же меня достали спамеры… из военкомата. Где бы отписаться от повесток?


******

 

 
Внимание!!!
Все материалы уроков, публикуемых в этом и во всех последующих выпусках рассылки «Программирование в 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
 

В избранное