| |
ть — например, заменить его
на какую-то строку или, скажем, заключить в кавычки. Это — типичный пример со-
поставления с заменой. Все эти возможности реализуются в PHP в виде функций,
которые мы сейчас и рассмотрим.
Использование регулярных
выражений в PHP
Вернемся на минуту опять к практике. Любое регулярное выражение в PHP — это
просто строка, его содержащая, поэтому функции, работающие с регулярными выра-
жениями, принимают их в параметрах в виде обычных строк.
Сопоставление
bool ereg(string $expr, string $str [,list &$Matches])
Функция пытается сопоставить выражение $expr строке $str и в случае удачи воз-
вращает true, иначе — false. Если совпадение было найдено, то в список
$Matches (конечно, если он задан) записываются отдельные участки совпадения
(как
выделять эти участки на языке RegEx, мы рассмотрим немного позже). Пока скажу
только, что в $Matches[0] всегда будет возвращаться подстрока совпадения цели-
ком.
Глава 22. Основы регулярных выражений в формате RegEx 299
Сопоставление с заменой
Если нам нужно не определить, удовлетворяет ли строка выражению, а заменить в
ней все подстроки, ему удовлетворяющие, на что-то еще, следует воспользоваться
следующей функцией:
string ereg_replace(string $expr, strint $str, string $strToChange)
Эта функция занимается тем, что ищет в строке $str все подстроки, соответствую-
щие выражению $expr, и заменяет их на $strToChange. В строке $strToChange
могут содержаться некоторые управляющие символы, позволяющие обеспечить до-
полнительные возможности при замене. Их мы рассмотрим позже, а сейчас скажу
только, что сочетание \0 (в PHP эта строка будет записываться как "\\0") будет
за-
менено на найденное совпадение целиком.
Язык RegEx
Существует несколько разновидностей языков, используемых для записи регулярных
выражений и работы с ними. У всех них есть много общего, но отдельные части все
же отличаются. В PHP версии 3 стандартно реализован только один из языков — он
называется RegEx.
В четвертой версии интерпретатора поддерживается также и стандарт PCRE
(Perl-Compatible Regular Expression — Регулярные выражения языка Perl). Его
выражения несколько более универсальны. Прочитать о формате PCRE можно
в любой книге по Perl.
Нужно заметить, что стандарт RegEx — один из самых первых и простых, поэтому он
не включает некоторые возможности, которые могут иногда потребоваться.
Перейдем теперь непосредственно к языку RegEx. Вот что он нам предлагает.
Каждое
выражение состоит из одной или нескольких управляющих команд. Некоторые из них
можно группировать (как мы группируем инструкции в программе при помощи фи-
гурных скобок), и тогда они считаются за одну команду. Все управляющие команды
разбиваются на три класса:
r простые символы, а также управляющие символы, играющие роль их "замените-
лей";
r управляющие конструкции (квантификаторы повторений, оператор альтернативы,
группирующие скобки и т. д.);
r так называемые мнимые символы (в строке их нет, но, тем не менее, они как бы
помечают какую-то часть строки — например, ее конец).
Часть IV. Стандартные функции PHP 300
Простые символы
Класс простых символов, действительно, самый простой. А именно, любой символ в
стро-
ке на RegEx обозначает сам себя, если он не является управляющим (к управляющим
сим-
волам причисляются следующие: ".*?+[]{}|$^"). Например, регулярное выражение
abcd будет "реагировать" на строки, в которых встречается последовательность
abcd.
Отмена действия спецсимволов
Если же нужно вставить в выражение один из управляющих символов, но только так,
чтобы он "не действовал", достаточно предварить его обратным слэшем. К примеру,
если мы ищем строку, содержащую подстроку a*b, то мы должны использовать для
этого выражение a\*b (опять же, в PHP эта строка будет записываться как
"a\\*b"),
поскольку символ * является управляющим (вскоре мы рассмотрим, как он работает).
Здесь я хотел бы еще (на этот раз в последний) раз заострить внимание на одной
де-
тали. Как вы знаете, для того, чтобы в какую-то строку вставить слэш,
необходимо
его удвоить. То есть мы не можем написать
$a="a\*b"
но можем
$a="a\\*b"
|
|