САМОУЧИТЕЛЬ PHP 4

Группы символов


Было бы глупо, если бы RegEx позволял нам задавать части искомых строк только непосредственно, как это было рассмотрено выше. Поэтому существуют несколько спецсимволов, обозначающих сразу группу букв. Эта возможность— один из краеугольных камней, основ регулярных выражений. Самый важный из таких знаков — точка "." — обозначает один любой символ. Например, выражение a.b имеет совпадение для строк azb или aqb, но не "срабатывает"

для, скажем, aqwb èëè ab. Позже мы рассмотрим, как можно заставить точку обозначать ровно один (или, к примеру, ровно пять) любых символов.

Но это далеко не все. Возможно, вы захотите искать не любой символ, а один из нескольких указанных. Для этого наши символы нужно заключить в квадратные скобки. К примеру, выражение a[xXyY]c соответствует строкам, в которых есть подстроки из трех символов, начинающиеся с а, затем одна из букв x, X, y, Y и, наконец, буква c. Если нужно вставить внутрь квадратных скобок символ [ или ], то следует просто поставить перед ним обратный слэш (напоминаю, в строках PHP — два

слэша), чтобы отменить его специальное действие.

Если букв-альтернатив много, и они идут подряд, то не обязательно перечислять их все внутри квадратных скобок — достаточно указать первую из них, потом поставить дефис и затем — последнюю. Такие группы могут повторяться. Например, выражение [a-z] обозначает любую букву от a до z включительно, а выражение [a-zA-Z0-9_] задает любой алфавитно-цифровой символ.

Существует и другой, иногда более удобный способ задания больших групп символов. В языке RegEx в скобках [ и ] могут встречаться не только одиночные символы, но и специальные выражения. Эти выражения определяют сразу группу символов. Например, [:alnum:]

задает любую букву или цифру, а [:digit:] — цифру. Вот полный список таких выражений:

r    [:alpha:] — буква;

r    [:digit:] — цифра;

r    [:alnum:] — буква или цифра;


r    [:space:] — пробельный символ;

r    [:blank:] — пробельный символ или символы с кодом 0 и 255;



r    [:cnrtl:] — управляющий символ;

r    [:graph:] — символ псевдографики;

r    [:lower:] — символ нижнего регистра;

r    [:upper:] — символ верхнего регистра;

r    [:print:] — печатаемый символ;

r    [:punct:] — знак пунктуации;

r    [:xdigit:] — цифра или буква от A до Z.

Как видим, все эти выражения задаются в одном и том же виде — [:что_то:]. Хочу еще раз обратить ваше внимание на то, что они могут встречаться только внутри квадратных скобок. Например, допустимы такие регулярные выражения:

abc[[:alnum:]]+          // abc, затем îäíà èëè áîëåå áóêâà èëè öèôðà

abc[[:alpha:][:punct]0]  // abc, далее буква, знак пунктуации или 0

но совершенно недопустимы следующее:

abc[:alnum:]+            // íå ðàáîòàåò!

Еще одно привлекательное свойство выражений [:что_то:]

заключается в том, что они автоматически учитывают настройки локали, а значит, правильно работают с "русскими" буквами (конечно, если перед этим была вызвана функция setlocale()

с верными параметрами). Таким образом, выражение [[:alpha:]]+ удовлетворяет любому слову как на английском, так и на русском языке. Добиться этого при помощи "обычного" использования [...]

было бы очень тяжело.


Содержание раздела