Регулярные выражения в PHP (сравнение Perl и PHP)

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

Что такое регулярные выражения?

Для многих программеров, не работавших прежде в вебе, данная область программирования неизвеста. Если объяснять кратко, реги - это шаблоны типа тех, что используются для выделения файлов по маске. Только реги это отдельная наука, по которой написаны толстые книжки (все, кроме описанной ниже, на английском). Регурярные выражения в PHP или других веб-языках позволяют свести до 1 команды то, что программист, не знающих их, вынужден был бы писать весьма долго (потом еще долго тестировать, ошибки выявлять...).

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

Пример с масками файлов: нам хочеться, переименовать все файлы, содержащие слово "php" в похожее имя, только поставив "regexp" на месте старого "php". Для этого мы делаем маску "*php*" (маска и последующая операция - НЕЗАВИСИМЫ!) и сообщаем что мы хотим: заменить все, что попадает под маску (шаблон / регулярное выражение) на новое имя "часть1,regexp,часть2" - т.е. просто заменить одно слово на другое. Это упрощенный пример на крайне примитивных шаблонах - маски файлов.

Более нормальный пример: найти в таблице чей-то HTML страницы все данные и распечатать только 2 и 4 колонки из нее (без HTML и прочего мусора). Обычно, с регулярными выражениями это решается в 2 этапа: Очевидно, что без регурярных выражений НЕВОЗМОЖНО так же эффективно (в одну команду) и быстро (в 10 и более раз) решать подобные задачи с операциями над текстом. Классический пример с курсом всех валют на rbc.ru - программой в 3 строки можно скачать веб-страницу - 1 строка, получить все курсы валют (название валюты, ед. изменения валюты, текущий курс) в массив - 1 строка, распечатать на экран - 1 строка.

Итак, регулярные выражения это просто некая технология в программировании. Функции для работы с ними есть в любом продвинутом языке: во всех веб-языках, в Си и т.д. Кроме того, реги применяют в пользовательских программах:

Факт N1

Неважно, по какой программе вы будете учить реги. Важно, что ТЕОРИЯ будет одна и таже. Таким образом, не пугайтесь, что приведенные ниже ссылки никоем образом не связаны с PHP. Не в PHP их придумали (это было еще в 40-вые годы). Регулярные выражения - это технология программирования. Это универсальное средство быстрого выполненения любых сложных операций с текстом.

Факт N2

Из-за того, что реги используются в разных программах, которые пишут разные люди, сами реги по синтаксису немного отличаются. К примеру, если в Досе симовол "*" означает любую последовательность символов, то любому человеку, изучившему маски файлов, легко понять, что делает символ "%" в команде LIKE (MySQL). ТОЖЕ САМОЕ, только с другим синтаксисом. Реально, в регах есть следующие различия:
  • разные программы программы поддерживают разный набор управляющих структур (типа "*", "?" и т.д.)
  • разные программы могут их по немного разному воспринимать (скажите, под маску "???.txt" попадет файл "12.txt" или нет?) - общий смысл один, а тонкостей много
  • разные программы по разному их записывают (в одних будет "*", в других "\*")

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

    PHP-ориентированные и Perl-ориентированные рег.выражения (в PHP3/4)

    Есть 2 типа регов в ПХП: "Перловые" и "ПХПышные" (помните о факте N1). Они различают внутренним устройством работы. Перловые работают раз в 10-30 быстрее ПХПышных. Функции PHP регов: ereg, eregi, ereg_replace, eregi_replace и др. ("i" - не учитывать регистр букв). Perl: preg_match, preg_replace, preg_match_all и др. (в ПХП нет такой же аналогичной!).

    Особенность Перловых регов в том, что после того, как вы составили выражение, его надо поместить между парных символов... Символ (обычно "/"): любой символ, кроме букв, цифр и пропусков (пробел, перевод каретки и т.д.). Желательно (надо так выбрать), чтобы этот символ не встречался в самом регулярном выражении, иначе его придется слешить. Поэтому не удивляйтесь, что почти всех примеры в ПЕРЛ-регах будут начинаться и заканчиваться парными обратными чертами (/).

    Смотрите в мануале нужные главы "Regular Expression Functions ***".

    Купите книгу (на русском)

    Название: Регулярные выражения
    Автор: Дж.Фридл
    Серия: Библиотека программиста
    Издательство: Питер
    Место издания: Санкт-Петербург
    Год издания: 2001
    Количество страниц: 352
    ISBN: 5-318-00056-8
    Тираж: 5000 экз.
    Вес: 340 г.
    Размеры: 17x24 см.
    Переплет: мягкий
    Цена: 81 р. (без доставки)
    Комплектация заказа: 1-3 дня
    
    Самое главное, что дает книга - понимание работы регулярных выражений. Изучив идущие ниже ссылки вы всего лишь научитесь использовать реги, чтобы выполнять текстовые операции.. А вот понять их суть поможет книга. Как я упомянал, ПХП- и ПЕРЛ-ориентированные регулярные выражения различаются по своей сути. Т.к. ПХП 100% поддерживает Перл-функции (которые еще быстрее раз в 10-30!), то данная книга вам полезна. Она, в основном (33% содержимого) подробно и понятно описывает Перл-реги. Еще 33% - общая теория по регам, и 33% - о самом Перле (для тех, кто будет использовать реги в Перле, а не в ПХП - нам это не нужно).

    Менее важная цель (кроме полного понимания и изучаения регов) книги - описание редких управляющих структур ПЕРЛ-регов. О них нигде в Интернете не написано (на русском). Так же там описаны реги для Phyton, TCL и Unix программ (типа egrep).

    Минусы книги: Резюме - покупать, без сомнений.

    Как купить книгу подешевле?

    На этой странице написано, как найти наиболее дешевые книги (любые). На сайте самого издательста Питер книга стоит 91 рубль - включая доставку по Питеру/МКАД. Самый дешевый вариант для Питера и Москвы - доставка по городу бесплатна. Я так и покупал. Если кто видел книгу в физическом магазине и дешевле - намыльте...

    Обратите внимание, я не ставлю ссылок на какие-либо конкретные книжные свалки, где за партнерскую программу мне бы капали проценты от заказов. Все честно, как обычно. Принцип простой - никогда/никаких баннеров, даже в таком виде. Хотя могу и передумать :-)



    Он-лайн документация по регурярным выражениям в PHP

    Вступление в регулярные выражения: detail.phpclub.net

    Из PHP/Perl

    Другое