"\" - обратная косая черта |
Наверх Предыдущий Следующий |
Символ обратной косой черты (backslash) используется в нескольких случаях. Прежде всего, если за ним следует не алфавитно-цифровой символ, то устраняется любой специальный смысл, который мог бы иметь этот символ. Такое использование обратной косой черты как escape-символа допустимо как вне, так и внутри классов символов.
К примеру, если вы хотите, чтобы произошло совпадение с символом "*", в шаблоне нужно написать "\*". Это правило будет использовано даже в том случае, если символ, следующий за обратной косой чертой не рассматривался бы как мета-символ. Таким образом, всегда безопасно предварять не алфавитно-цифровые символы символом обратной косой черты, когда предполагается их непосредственное использование в шаблоне. В частности, если вы хотите задать сам символ косой черты, следует написать "\\".
Если шаблон компилируется с опцией PCRE_EXTENDED, то пробелы, переводы строки и все, что находится между символами "#" игнорируется. Это не касается классов символов. Для включения в шаблон пробела и самого символа "#" следует предварить их символом обратной косой черты: "\ " и "\#".
Другое использование символа обратной косой черты - это предоставление возможности задания непечатных символов внутри шаблона. Не существует ограничений относительно использования непечатных символов внутри шаблона, за исключением использования бинарного нуля для завершения шаблона, но когда шаблон подготавливается при помощи редактора текста обычно удобнее пользоваться одной из следующих escape-последовательностей вместо бинарного символа, который он представляет:
Точный эффект использования "\cx" следующий: если "x" - это символ в нижнем регистре, то он конвертируется в верхний регистр. Затем 6-й бит символа (hex 40) инвертируется. Таким образом "\cz" превращается в hex 1A, но "\c{" превращается в hex 3B, в то время как "\c;" превращается в hex 7B.
После "\x" читается до двух шестнадцатеричных цифр, которые могут быть как в верхнем, так и в нижнем регистре. После "\0" читается до двух восьмеричных цифр. В обоих случаях, если присутствует менее двух цифр, то используются только те, что есть. Таким образом, последовательность "\0\x\07" задает два бинарных нуля, за которыми следует символ звонок (BEL). Убедитесь, что вы задали две цифры после начального нуля, если последующие символы могут быть проинтерпретированы как восьмеричные цифры.
Обработка символа обратной косой черты, за которым следует ненулевая цифра, достаточно сложна. За пределами класса символов PCRE читает ее и все последующие цифры как десятичное число. Если это число меньше 10, или если в выражение присутствовало, по крайней мере, такое или большее количество открывающихся скобок, такая последовательность рассматривается как обратная ссылка. Описание того, как это работает, будет дано позже, после обсуждения подшаблонов заключенных в скобки.
Внутри класса символов или если десятичное число больше 9 и количество обнаруженных подшаблонов меньше этого числа, то PCRE перечитывает до трех восьмеричных цифр следующих после символа обратной косой черты. После этого генерируется единственный байт из младших 8 бит числа. Любые последующие цифры используются так, как они есть. Например:
Следует отметить, что восьмеричные величины со значением 100 и более не должны предваряться нулем, так как читается не более трех цифр.
Все последовательности, которые определяют один байт, могут использоваться как внутри, так и вне класса символов. В дополнение, внутри класса символов, последовательность "\b" интерпретируется как символ забоя (backspace) hex 08. Вне класса символов, эта последовательность имеет другое значение (смотри ниже).
Третьим применением символа обратной косой черты является задание обобщенных типов символа:
Каждая пара escape-последовательностей (заглавная и строчная буквы) разделяет полный набор символов на два непересекающихся множества. Любой заданный символ входит в одну и только одну escape-последовательность из пары.
Множество "словесных" символов - это любая буква, цифра или символ подчеркивания "_", то есть любой символ, который может быть частью "слова" в языке Perl. Определения букв и цифр задаются в PCRE таблицами символов и могут отличаться, если сравнение ведется с учетом локализации. К примеру, при использовании французской локализации, среди символов с кодами больше 128 встречаются буквы, соответственно, такие символы будут совпадать с \w.
Последовательности обозначающие типы символов могут встречаться как внутри классов символов, так и вне их. Каждая из этих последовательностей представляет ровно один символ в исходной строке. Если текущая позиция находится в конце строки, то не будут совпадения ни с одной из этих последовательностей, так как нечего сравнивать.
Четвертым применением символа обратной косой черты является задание некоторых простых утверждений. Утверждение представляет собой некоторое условие, которое должно быть соблюдено в некоторой точке сравнения, при этом символы из исходной строки не потребляются и текущая позиция не меняется. Использование подшаблонов для более сложных утверждений описано далее. При помощи символа обратной косой черты можно задавать следующие утверждения:
Эти утверждения не могут появляться внутри классов символов. Заметьте, что \b имеет внутри класса символов совершенно другое значение, а именно означает символ забоя (backspace).
Граница слов - это позиция в исходной строке, где исходный и предыдущий символы не принадлежат одновременно множеству \w или \W (то есть один принадлежит \w, а другой \W). Границей слов также являются начало или конец строки, когда первый или последний символ принадлежит множеству \w. Утверждения \A, \Z, и \z отличаются от традиционных "^" и "$" (описанных ниже) тем, что совпадают только с началом и концом строки, вне зависимости от установки опций. На них не влияют опции PCRE_NOTBOL или PCRE_NOTEOL. Разница между \Z и \z в том, что \Z истинно как перед символом перевода строки, который является последним символом в строке, так и в самом конце строки, в то время как \z истинно только в самом конце строки.
|