Регулярные Выражения
Регулярные выражения используются для сложного манипулирования строками в PHP/FI. Поддержка интерфейса между скриптом и регулярными выражениями осуществляется через следующие функции: Reg_Match(), Reg_Replace(), и Reg_Search(). Первым аргументом для всех трех функций - это строка, задающая регулярное выражение. Этот строка состоит из регулярных и специальных символов. Регулярные символы имеют то же значение что и при в других командах Unix, в то время как специальные символы имеют специальное значение. Далее следуюет - полный список специальных символов и их значения как это воспринимает синтаксический анализатор PHP/FI:
- Является специальным символом, который соответствует любому символу, за исключением символа новой строки. Используя конкатенацию, мы можем задавать регулярные выражения подобно '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.
- Так выражение, "foo\|bar" или "foo" или "bar", но никакую другую строку.
- "\|" применяется к максимально большим окружающим выражениям. Только "\(...\)" вокруг выражений могут ограничивать мощность "\|".
- Существует полная возможность перебора с возвратами , когда задано множество "\|".
- является конструкцией группирования , которая служит трем целям: 1. Заключать в себя множество "\|" альтернатив для других операций. Так, шаблон "\(foo\|bar\)x" соответствует или "foox" или "barx".
- 2. Включать сложное выражение для постфиксного "*". Так шаблон "ba\(na\)*" задает "bananana", и т.д., с любым (ноль или болеее ) количеством "na".
- 3. Отметить искомую подстроку для последующего обращения.
- Эта последняя функция - не следствие идеи относительно группировки выражений скобками; это - отдельная особенность, которая задает второе значение для той-же самой конструкции "\(...\)" , так как нет практически никакого конфликта между этими двумя значениями. Вот объяснение этой особенности:
- После окончания конструкции "\(...\)" , анализатор запоминает начало и конец текста, совпавшего с этой конструкцией. Затем, позднее в регулярном выражении можно использовать "\" с поледующей цифрой (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 в этом случае) и затем всю совпавшую строку, споследующим первым словом строки и последним.
- Задает пустую строку, но только, если она находится в начале или в конце слова. Таким образом, "\bfoo\b" соответствует любому местонахождению "foo" в виде отдельного слова. "\bball\(s\|\)\b" соответствует "ball" или "balls" в виде отдельных слов.
- Задает пустую строку, если она не в начале или не в конце слова.
- Задает пустую строку, но только, если она - в начале слова.
- Задает пустую строку, но только, если она в конце слова.
- Задает любой символ, являющийся составной частью слова.
- Задает любой символ, который - не является составной частью слова.
[ ВЕРНУТЬСЯ К ОГЛАВЛЕНИЮ ]
|