Druzya.org
Возьмемся за руки, Друзья...
 
 
Наши Друзья

Александр Градский
Мемориальный сайт Дольфи. 
				  Светлой памяти детей,
				  погибших  1 июня 2001 года, 
				  а также всем жертвам теракта возле 
				 Тель-Авивского Дельфинариума посвящается...

Библиотека :: Компьютеры и Программирование :: Котеров Д. В. - Самоучитель PHP 4
<<-[Весь Текст]
Страница: из 287
 <<-
 
рукцией 

[^<>], которая обозначает любой символ, кроме тех, которые перечислены после [^ 

и до ]. Например, выражение a[^ \t\n\r]b "срабатывает" на все строки, содержа- 
щие буквы a и b, разделенные любым не пробельным символом. 
В отрицательной группе могут быть задействованы любые символы и выражения, 
которые допустимы в конструкции [...]. Таким образом, мы можем положиться на 
настройки локали и в этом случае. 
Квантификаторы повторений 
Перейдем теперь к рассмотрению так называемых квантификаторов — специаль- 
ных знаков, использующихся для уточнения действия предшествующих им символов 
первого класса. 
Ноль или более совпадений 
Наиболее важный из них — звездочка *. Она обозначает, что предыдущий символ 
может быть повторен ноль или более раз (то есть, возможно, и ни разу). Например,
 
выражение a-*- соответствует строке, в которой есть буква a, затем — ноль или 
бо- 
лее минусов и, наконец, завершающий минус. 
В простейшем случае при этом делается попытка найти как можно более длинную 
строку, т. е. звездочка "поглощает" так много символов, как это возможно. К 
приме- 
ру, для строки a---b найдется подстрока a--- (звездочка "заглотила" 2 минуса), 
а не 
a- (звездочка захватила 1 минус). Это — так называемая "жадность" квантификато- 

ра, и в PHP нет, к сожалению, возможности "убавить ему аппетит". 
Язык PCRE, в отличие от RegEx, позволяет ограничивать "жадность" кванти- 
фикаторов. 
Одно или более совпадений 
Возможно, вы заметили некоторую неуклюжесть в предыдущем примере. 
В самом деле, фактически мы составляли выражение, которое ищет строки с a и од- 

ним или более минусом. Можно было бы записать его и так: a--*, но лучше 
восполь- 
зоваться специальным квантификатором, который как раз и обозначает "одно или 

Глава 22. Основы регулярных выражений в формате RegEx 303 
более совпадений" — символом плюса +. С его помощью можно было бы выражение 
записать лаконичнее: a-+, что буквально и читается как "a и один или более 
мину- 
сов". Вот пример выражения, которое определяет, есть ли в строке английское 
слово, 
написанное через дефис: [a-zA-Z]+-[a-zA-Z]+. 
Ноль или одно совпадение 
И уж чтобы совсем облегчить жизнь, иногда используют еще один квантификатор — 
знак вопроса ?. Он обозначает, что предыдущий символ может быть повторен ноль 
или один (но не более!) раз. Например, выражение 
[a-zA_Z]+\r?\n определяет строки, в которых последнее слово прижато к правому 
краю строки. Если мы работаем в Unix, то там в конце строки символ \r обычно 
от- 
сутствует, тогда как в текстовых файлах Windows каждая строка заканчивается 
парой 
\r\n. Для того чтобы сценарий правильно работал в обоих системах, мы должны 
учесть эту особенность — возможное наличие \r перед концом строки. 
Заданное число совпадений 
Наконец, давайте рассмотрим последний квантификатор повторения. С его помощью 
можно реализовать все перечисленные выше возможности, правда, и выглядит он 
несколько более громоздко. Итак, сейчас речь пойдет о квантификаторе "фигурные 
скобки". Существует несколько форматов его записи. Давайте последовательно раз- 

берем каждый из них. 
r X{n,m} — указывает, что символ X может быть повторен от n до m раз; 
r X{n} — указывает, что символ X должен быть повторен ровно n раз; 
r X{n,} — указывает, что символ X может быть повторен n или более раз. 
Значения n и m в этих примерах обязательно должны принадлежать диапазону от 0 
до 
255 включительно. В качестве тренировки вы можете подумать, как будут выглядеть 

квантификаторы *, + и ? в терминах {...}. 
Мнимые символы 
Мнимые символы — это просто участок строки между соседними символами (да, 
именно так, как это ни абсурдно), удовлетворяющий некоторым свойствам. Фактиче- 

ски, мнимый символ — это некая позиция в строке. Например, символ ^ 
соответству- 
ет началу строки (заметьте: не первому символу строки, а в точности началу 
строки, 
позиции перед первым символом), а $ — ее концу (опять же, позиции за концом 
стро- 
ки). 
Чтобы это понять, давайте рассмотрим выражение ^abc, которое соответствует лю- 
бой строке, начинающейся с abc, и выражение abc$, соответствующее строке с abc 
на "хвосте". Наконец, выражение ^abc$ сопоставимо только со строкой 
 
<<-[Весь Текст]
Страница: из 287
 <<-