Главная страница статей --> Хитрости при программировании php, заметки по базам данных

Регулярные выражения используются для сложного манипулирования строками в PHP

Источник: realcoding.net

Поддержка интерфейса между скриптом и регулярными выражениями осуществляется через
следующие функции: 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 - шаблон. Шаблон это набор
символов для склейки строк. Этот набор будет вставлен между всеми элементами
массива. Например, имеем такой массив:

$a[0] = string1; $a[1] = string2; $a[2] = string3;

Соответственно, функция implode($a, "***") вернет нам строку
"string1***string2***string3".

$a = explode($c,$s); Функция explode является обратной implode. Она разбивает
строку $s используя шаблон $c и помещает элементы в массив $a. Например, если
взять строку "string1*string2*string3" и выполнить функцию $a = explode("*",$s),
то получим такой массив:

$a[0] = string1; $a[1] = string2; $a[2] = string3;

$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") заменит в заданной строке все символы "*"
на символы "+".



Похожие статьи:
- Новый подход к веб-приложениям
- Создание таблиц Excel средствами PHP
- Серверные скрипты. Введение
- Оптимизация кода для поисковых систем
- Использование сессий в PHP
- Посещаемость сайта рефералами
- Все об AuthType или авторизация в Apache
- Делаем простейшее подобие интернет-магазина.
- Проверка формы на JavaScript
- Предопределённые переменные PHP
- Сравнительный тест эффективности языков программирования для WEB
- Статус домена
- Используем базу данных MySQL


Оглавление | Обсудить на форуме | Главная страница сайта | Карта сайта |

Контакты
Редакция:
[0.001]