Поддержка интерфейса между скриптом и регулярными выражениями осуществляется через следующие функции: split(), ereg(), ereg_replace(). (доп. редактора). Первым аргументом для всех трех функций - это строка, задающая регулярное выражение. Этот строка состоит из регулярных и специальных символов. Регулярные символы имеют то же значение что и при в других командах unix, в то время как специальные символы имеют специальное значение. Далее следуюет - полный список специальных символов и их значения как это воспринимает синтаксический анализатор php:
. Является специальным символом, который соответствует любому символу, за исключением символа новой строки. Используя конкатенацию, мы можем задавать регулярные выражения подобно a.b, которое соответствует любой трех-символьной строке, которая начинается с a и заканчивается b.
* Сам по себе это не конструкция; это - суффикс, который означает, что предшествующее регулярное выражение, может быть повторено сколь угодно много раз. В строке fo*, символ * применяется к символу o, так fo* задает f с последующим любым количеством символов o.
В случае нулевого количества символов o строка fo* будет также соответствовать f.
Символ * Всегда применяет к *наименьшему* возможному предшествующему выражению. Таким образом, fo* задает повторение o, а не повторение fo.
Процесс сравненияr обрабатывает конструкцию *, пытаясь согласовать настолько много повторений насколько много их их может быть найдено. Затем он продолжает обработку остальной части шаблона. Если, впоследствии, появится несоответсвтие с шаблогам, происходит возврат, путем отбрасывания некоторых повторений *, в случае, если это делает возможным совпадение остальной части шаблона. Например, шаблон c[ad]*ar для строки caddaar, [ad]* сначала совпадает с addaa, но это не позволяет совпасть следующему символу a в шаблоне. Так последнее совпадение [ad] отменяутся, и следующий символ a пробуется вновь. Теперь шаблон сооветствует.
+ + Подобен * за исключением того, что требуется по крайней мере одно соответствие для предшествующего образца. Таким образом, c[ad]+r не совпадает с cr, но совпадет с чем либо еще что может быть задано шаблоном c[ad]*r.
? ? Подобен * за исключением того, что позволяет задать нуль или более соответствий для заданного шаблона. Таким образом, шаблон c[ad]?r будет задавать строки cr или car или cdr, и ничего больше.
[ ... ] [ начинает множество символов, которое завершается символом ]. В самом простом случае, символы между этими двумя скобками формируют множество. Таким образом, [ad] задает символы a или d, и [ad]* задает любоую п оследовательность символов a и d (включая и пустую строку), из чего следует, что шаблон c[ad]*r задает car, и т.д.
Диапазон символов также может быть включен в множество символов, с помощью символа -, помещенного между двумя другими. Таким образом, шаблон [a-z] задает любой символ нижнего регистра. Диапазоны могут свободно перемежаться с одиночными символами, как в шаблоне [a-z$%.], который задает любой символ нижнего регистра или символы $, % или точку.
Обратите внимание, что символы, обычно являющиеся специальными, внутри множества символов больше не являются таковыми. Внутри множества символов существует полностью отличный набор специальных символов : ], - и ^.
Для того чтобы включить ] в множество символов, нужно сделать его первым символом. Например, шаблон []a] задает символ ] или a. Чтобы включить символ -, нужно использовать его в таком контексте, где он не может указывать диапазон: то есть или первым символом, или сразу после диапазона.
[^ ... ] [^ начинает исключающее множество символов, который задает любой символ за исключением заданных. Таким образом, шаблон [^a-z0-9a-z] задает любой символ *за исключением* букв и цифр. ^ не является специальным символом в множестве, если только это не первый символ. Символ следующий после ^ обрабатывается так, как будто он является первым (это может быть - или ]).
^ Является специальным символом, который задает пустую строку - но только в случае если он стоит в начале строки шаблона. Иначе шаблон не будет соответствовать. Таким образом, шаблон ^foo задает foo в начале строки.
$ Подобен ^, но только задает конец строки. Так шаблон, xx*$ задает строку с одним или более символом x в конце строки.
Имеет два значения: экранирует вышеперечисленные специальные символы (включая ), и задает дополнительные специальные конструкции.
Так как экранирует специальные символы, $ является регулярным выражением, задающим только символ $, а [ является регулярным выражением, задающим только [, и так далее.
В основном, с последующим любым символом соответствует только этому символу. Однако, есть некоторые исключения: символы, который, когда предшествует специальная конструкция. Такие символы обычно всегда задают их собственное значение.
Никакие новые специальные символы не определены. Все расширения к синтаксису регулярных выражений сделаны, определением новые двух-символьных конструкций, которые начинаются с .
Задает альтернативу. Два регулярных выражения a и b с между ними формируют выражение, которое задает что-либо чему соответствует или А или b.
Так выражение, foobar или foo или bar, но никакую другую строку.
применяется к максимально большим окружающим выражениям. Только (...) вокруг выражений могут ограничивать мощность .
Существует полная возможность перебора с возвратами , когда задано множество .
( ... ) является конструкцией группирования , которая служит трем целям: 1. Заключать в себя множество альтернатив для других операций. Так, шаблон (foobar)x соответствует или foox или barx.
2. Включать сложное выражение для постфиксного *. Так шаблон ba(na)* задает bananana, и т.д., с любым (ноль или болеее ) количеством na.
3. Отметить искомую подстроку для последующего обращения.
Эта последняя функция - не следствие идеи относительно группировки выражений скобками; это - отдельная особенность, которая задает второе значение для той-же самой конструкции (...) , так как нет практически никакого конфликта между этими двумя значениями. Вот объяснение этой особенности:
digit После окончания конструкции (...) , анализатор запоминает начало и конец текста, совпавшего с этой конструкцией. Затем, позднее в регулярном выражении можно использовать с поледующей цифрой (digit), что означает задать тот же самый текст, который соответствовует digit нахождению в конструкции (...). (...) конструкции пронумерованы в порядке возрастания в регулярном выражении.
Строкам задающим первые девять конструкций (...) , появляющимся в регулярном выражении - соответствуют числа от 1 до 9. 1 до 9 может быть использовано для обращения к тексту, соответствующей (...) конструкции. Эти 9 сохраненных конструкций известны также как регистры.
Например, шаблон (.*)1 задает любую строку, который состоит из двух идентичных частей. (.*) задает первую часть, которая может быть всем чем угодно, но последующая 1 задает точно тот же тексту.
Сохраненные конструкции или регистры могут использоваться внутри одиночных выражений, или, они могут быть извлечены и использоваться где-либо еще. Добавление третьего параметра к reg_match() или reg_search() определит массив, в который будут записаны 9 регистров. При этом записывается дополнительный регистр (нулевой элемент) в котором задана строка совпавшая со всем выражением. Например:
<?$string = this is a test; $cnt = reg_match((w*).*() echo $cnt; echo $regs[0]; echo $regs[1]; echo $regs[2]; >
Вышеупомянутое сначала напечатает количество совпавших символов (14 в этом случае) и затем всю совпавшую строку, споследующим первым словом строки и последним.
b Задает пустую строку, но только, если она находится в начале или в конце слова. Таким образом, "bfoob" соответствует любому местонахождению "foo" в виде отдельного слова. "bball(s)b" соответствует "ball" или "balls" в виде отдельных слов.
b Задает пустую строку, если она не в начале или не в конце слова.
< Задает пустую строку, но только, если она - в начале слова.
> Задает пустую строку, но только, если она в конце слова.
w Задает любой символ, являющийся составной частью слова.
w Задает любой символ, который - не является составной частью слова.
-------------------------------------------------------------------------------- Основные функции работы с массивами и строками Сегодня я расскажу вам о регулярных выражениях, а также о главных функциях работы со строками и массивами. В этом разделе Вы познакомитесь с функциями. С помощью этих функций можно производить замену определенных элементов строки, осуществлять поиск в строке, работать с заданными шаблонами и многое другое. Функций не очень много, но некоторые их них могут представлять определенные трудности при работе, так как имеют множество различных параметров. Сегодня я познакомлю вас с основными параметрами, которые позволяют производить главные действия. Итак, рассмотрим эти функции по порядку.
$s = implode($a,$c); Мы уже познакомились с этой функцией в прошлом выпуске. Она позволяет соединять все элементы массива в одну строку. Здесь $s - строка, в которую будет помещен результат, $a - массив, $c - шаблон. Шаблон это набор символов для склейки строк. Этот набор будет вставлен между всеми элементами массива. Например, имеем такой массив:
Соответственно, функция implode($a, "***") вернет нам строку "string1***string2***string3".
$a = explode($c,$s); Функция explode является обратной implode. Она разбивает строку $s используя шаблон $c и помещает элементы в массив $a. Например, если взять строку "string1*string2*string3" и выполнить функцию $a = explode("*",$s), то получим такой массив:
$a = split($c,$s); Работа фунции абсолютно идентична explode, за тем исключением, что в ней можно использовать регулярные выражения. Это означает, что уже нельзя для простой разбивки строки использовать символ "*", так как он является регулярным выражением (см. раздел выше). Поэтому для разбивки строки можно использовать какий-нибудь другой символ, например, "~".
ereg($c,$s); Функция ereg возвращает истину, если в строке $s найдено соответствие регулярному выражению $c. $c здесь это любой набор описанных в предыдущем разделе регулярных выражений. Например, мы имеем строку $s = "here is testing string". Функция ereg("^here.*",$s) вернет истину, так как в регулярном выражении указывается, что слово here должно быть в начале строки (спец. символ "^" указывает на это), а после этого слова могут идти любые символы (конструкция ".*"). Вот пример программы, которая проверяет это соответствие:
<? $s = "here is testing string"; if (ereg("^here.*",$s)) echo "Найдено!"; else echo "Не найдено."; ?>
А вот небольшой пример, который ищет шаблон в любой части слова: <? $s = "here is testing string"; if (ereg(".*testing.*",$s)) echo "Найдено!"; else echo "Не найдено."; ?>
$s = ereg_replace($c,$c1,$s); Эта функция заменяет все символы в строке $s, подходящие под регулярное выражение $c на символы $c1. Вот пример, в котором мы заменяем все цифры в строке на знаки "+":
<? $s = 1 here 2 is 3 testing 4 string 5; $s = ereg_replace([0-9],+,$s); echo $s; ?>
Как видите, функция возвращает результат в заданную переменную. $s = str_replace($c,$c1,$s); Работа функции аналогична ereg_replace, за тем исключением, что в параметре $c нельзя использовать регулярные выражения. Эту функцию можно использовать, когда у вас нет сложного шаблона для замены, а нужно произвести простой поиск и замену нескольких символов. Например, функция $s = str_replace("*", "+", "str1*str2*str3") заменит в заданной строке все символы "*" на символы "+".