"[" и "]" квадратные скобки |
Наверх Предыдущий Следующий |
Открывающаяся квадратная скобка начинает определение класса символов, закрывающаяся квадратная скобка заканчивает это определение. Сама по себе закрывающаяся квадратная скобка не имеет специального значения. Если закрывающаяся квадратная скобка должна входить в класс символов, то она должна быть первым символом в определении (после начального "^", если нужно), либо должна быть предварена символом обратной косой черты "\".
Класс символов совпадает с единственным символом в исходной строке. Этот символ должен входить в множество, определенное классом, либо, если в начале определения присутствует "^", не входить в это множество. Если требуется включить символ "^" в класс, то он должен быть либо не первым символом в определении, либо перед ним должен быть символ обратной косой черты "\". К примеру, класс символов [aeiou] совпадет с любой гласной буквой в нижнем регистре, в то время как [^aeiou] совпадет с любым символом, не являющимся гласной в нижнем регистре. Заметьте, что символ "^" это просто удобный способ задания множества символов путем перечисления символов, не входящих в это множество. Класс символов не является утверждением, он потребляет символ из исходной строки и не совпадает, если текущая позиция находится в конце исходной строки.
Когда установлен режим сравнения без учета регистра, символы в определении класса представляют обе версии символа (в верхнем и в нижнем регистре). Так, к примеру, сравнение с классом [aeiou] в режиме без учета регистра будет успешным как для "A" так и для "a", а сравнение с классом [^aeiou] режиме без учета регистра будет неуспешным для "A", в то время как с учетом регистра оно было бы успешным.
Символ перевода строки в классе символов никогда не рассматривается специальным образом, вне зависимости от установки опций PCRE_DOTALL и PCRE_MULTILINE. Так, сравнение [^a] с символом перевода строки всегда будет успешным.
Символ минус "-" может использоваться для указывания диапазонов символов внутри класса. К примеру [d-m] совпадет с любой буквой между "d" и "m" включительно. Если символ минус "-" сам должен присутствовать в классе символов, то перед ним должен стоять символ обратной косой черты "\", либо он должен находится в позиции, когда его нельзя проинтерпретировать как указатель диапазона, то есть в начале или в конце определения класса.
Запрещается указывать символ "]" в качестве конца диапазона символов. То есть шаблон [W-]46] будет проинтерпретирован как класс из двух символов "W" и "-" за которым следует строка "46]" и, таким образом будет совпадение со строками "W46]" или "-46]". Тем не менее, если перед символом "]" стоит символ обратной косой черты "\", то он будет проинтерпретирован как конец диапазона. То есть [W-\]46] будет проинтерпретирован как единственный класс, состоящий из указания диапазона за которым указаны еще два отдельных символа. В качестве конца диапазона может также использоваться восьмеричное или шестнадцатеричное представление символа "]".
Диапазоны указываются для набора символов ASCII. В диапазонах можно использовать числовые коды символов, к примеру: [\000-\037]. Если диапазон включает буквы и установлен режим проверки без учета регистра, то совпадение будет происходить с буквами в любом регистре. К примеру, объявление [W-c] эквивалентно объявлению [][\^`wxyzabc] в режиме без учета регистра.
Типы символов \d, \D, \s, \S, \w и \W также могут использоваться в определениях классов символов, при этом они добавляют в класс символы, которым соответствуют. К примеру, [\dABCDEF] совпадет с любой шестнадцатеричной цифрой. Символ "^" может использоваться совместно с типами символов в верхнем регистре для удобного задания более ограниченных наборов символов, чем те, которые получаются при использовании соответствующего типа символов в нижнем регистре. Так, к примеру [^\W_] совпадет с буквой или цифрой, но не с символом "_".
Хотя любые не алфавитно-цифровые символы, за исключением "\", "-" и "^" (в начале), и завершающего "]" не имеют специального смысла внутри класса символов, ничто не запрещает предварять их символом обратной косой черты "\".
|