mirror of
https://github.com/php/doc-ru.git
synced 2025-08-16 18:22:04 +00:00
208 lines
13 KiB
XML
208 lines
13 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
||
<!-- EN-Revision: bae0435ddd1fbda2fe0089f682265ee3014dacea Maintainer: shein Status: ready -->
|
||
<!-- Reviewed: no -->
|
||
<article xml:id="reference.pcre.pattern.modifiers" xmlns="http://docbook.org/ns/docbook">
|
||
<title>Описание модификаторов шаблонов Perl-совместимых регулярных выражений (PCRE)</title>
|
||
<titleabbrev>Модификаторы шаблонов</titleabbrev>
|
||
<para>
|
||
Доступные PCRE-модификаторы перечислены ниже.
|
||
Названия модификаторов в круглых скобках относятся к внутренним именам PCRE-выражений.
|
||
Функции игнорируют пробелы и переводы строк в модификаторах, другие символы вызывают ошибку.
|
||
</para>
|
||
<para>
|
||
<blockquote>
|
||
<variablelist>
|
||
<varlistentry>
|
||
<term><emphasis>i</emphasis> (<literal>PCRE_CASELESS</literal>)</term>
|
||
<listitem>
|
||
<simpara>
|
||
С этим модификатором символы в шаблоне соответствуют заглавным и строчным буквам.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
<varlistentry>
|
||
<term><emphasis>m</emphasis> (<literal>PCRE_MULTILINE</literal>)</term>
|
||
<listitem>
|
||
<simpara>
|
||
Модуль PCRE по умолчанию обрабатывает входную строку как строку,
|
||
которая состоит из одной «строки» символов, даже если строка содержит
|
||
переходы на новую строку.
|
||
|
||
Метасимвол «начала строки» — «^» — соответствует только началу
|
||
строки, тогда как метасимвол «конца строки» —
|
||
«$» — соответствует только концу строки или позиции перед
|
||
переводом строки, который завершает текст, если не установили модификатор
|
||
<emphasis>D</emphasis>. В языке Perl ситуация аналогична.
|
||
</simpara>
|
||
<simpara>
|
||
При установке этого модификатора конструкция «начало строки»
|
||
соответствует позициям непосредственно после символов новой строки
|
||
во входной строке и началу входной строки, а конструкция «конец строки» —
|
||
позициям непосредственно после символов перевода строки и концу входной строки.
|
||
Это соответствует Perl-модификатору /m.
|
||
|
||
Установка этого модификатора не изменит поведение сопоставления, если входная строка
|
||
не содержит символов перевода строки «\n», или шаблон не содержит
|
||
метасимволов начала «^» или конца «$» строки.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
<varlistentry>
|
||
<term><emphasis>s</emphasis> (<literal>PCRE_DOTALL</literal>)</term>
|
||
<listitem>
|
||
<simpara>
|
||
С этим модификатором метасимвол «точка» в шаблоне соответствует
|
||
всем символам, включая перевод строк. Без модификатора анализатор
|
||
исключит переводы строк. Этот модификатор эквивалентен Perl-модификатору /s.
|
||
Символьный класс с отрицанием, например [^a], соответствует символу
|
||
перевода строки независимо от установки этого модификатора.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
<varlistentry>
|
||
<term><emphasis>x</emphasis> (<literal>PCRE_EXTENDED</literal>)</term>
|
||
<listitem>
|
||
<simpara>
|
||
Анализатор, если этот модификатор установили, проигнорирует в шаблоне
|
||
символы пробельных данных, если пробельные символы не заэкранировали
|
||
или не записали внутри символьного класса. Парсер также проигнорирует
|
||
символы между неэкранированным символом «#» вне символьного класса
|
||
и следующим переводом строки, включая сами символы «\n» и «#». Это
|
||
эквивалентно Perl-модификатору /x и разрешает размещать комментарий
|
||
в сложных шаблонах. Замечание: это касается только символьных данных.
|
||
Пробельные символы не фигурируют в служебных символьных последовательностях,
|
||
например, в последовательности «(?(», которая открывает условную подмаску.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
<varlistentry>
|
||
<term><emphasis>A</emphasis> (<literal>PCRE_ANCHORED</literal>)</term>
|
||
<listitem>
|
||
<simpara>
|
||
Этот модификатор «заякоревает» шаблон, то есть парсер найдёт совпадение,
|
||
только если шаблон соответствует началу входной строки. Того же эффекта
|
||
добиваются конструкцией «^» в самом шаблоне — единственный путь сделать то же в Perl.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
<varlistentry>
|
||
<term><emphasis>D</emphasis> (<literal>PCRE_DOLLAR_ENDONLY</literal>)</term>
|
||
<listitem>
|
||
<simpara>
|
||
С этим модификатором метасимвол «$», или знак доллара, в шаблоне
|
||
будет соответствовать только концу входной строки. Без этого модификатора
|
||
знак доллара также соответствует позиции перед последним символом,
|
||
если последний символ — перевод строки (но не распространяется на другие переводы строк).
|
||
Парсер проигнорирует этот модификатор, если указали модификатор
|
||
<emphasis>m</emphasis>. В языке Perl аналогичного модификатора нет.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
<varlistentry>
|
||
<term><emphasis>S</emphasis></term>
|
||
<listitem>
|
||
<simpara>
|
||
Шаблон, который сопоставляется многократно, заслуживает того, чтобы парсер
|
||
потратил на анализ этого шаблона больше времени, чтобы увеличить скорость сопоставления.
|
||
Парсер дополнительно анализирует шаблон при установке этого модификатора.
|
||
Изучение шаблона парсером полезно только для «незаякоренных» шаблонов, которые
|
||
не начинаются с фиксированного начального символа.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
<varlistentry>
|
||
<term><emphasis>U</emphasis> (<literal>PCRE_UNGREEDY</literal>)</term>
|
||
<listitem>
|
||
<simpara>
|
||
Модификатор инвертирует «жадность» квантификаторов, чтобы
|
||
модификаторы не были жадными по умолчанию, а становились жадными,
|
||
если за ними идёт знак <literal>?</literal>. Модификатор
|
||
несовместим с языком программирования Perl. Нежадный режим
|
||
также устанавливают модификатором <literal>(?U)</literal>
|
||
<link linkend="regexp.reference.internal-options">внутри шаблона</link>
|
||
или добавляют знак вопроса после квантификатора (например, <literal>.*?</literal>).
|
||
</simpara>
|
||
<note>
|
||
<para>
|
||
В нежадном режиме обычно невозможно совпадение символов,
|
||
количество которых превышает значение директивы
|
||
<link linkend="ini.pcre.backtrack-limit">pcre.backtrack_limit</link>.
|
||
</para>
|
||
</note>
|
||
</listitem>
|
||
</varlistentry>
|
||
<varlistentry>
|
||
<term><emphasis>X</emphasis> (<literal>PCRE_EXTRA</literal>)</term>
|
||
<listitem>
|
||
<simpara>
|
||
Модификатор включает дополнительную функциональность модуля PCRE,
|
||
которая несовместима с Perl. С этим модификатором обратный слеш в шаблоне,
|
||
за которым идёт буква без специального значения, вызывает ошибку.
|
||
Такое поведение резервирует комбинации с обратным слешем перед буквой
|
||
без специального значения для будущего расширения.
|
||
По умолчанию, как и в языке Perl, парсер рассматривает слеш перед буквой
|
||
без специального значения как литерал. Пока это всё, чем управляет модификатор.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
<varlistentry>
|
||
<term><emphasis>J</emphasis> (<literal>PCRE_INFO_JCHANGED</literal>)</term>
|
||
<listitem>
|
||
<simpara>
|
||
Установка внутренней опции (?J) меняет локальную опцию
|
||
<literal>PCRE_DUPNAMES</literal>. Модификатор разрешает подшаблонам
|
||
одинаковые имена. Поддержку модификатора <literal>J</literal> добавили в PHP 7.2.0.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
<varlistentry>
|
||
<term><emphasis>u</emphasis> (<literal>PCRE_UTF8</literal>)</term>
|
||
<listitem>
|
||
<simpara>
|
||
Модификатор включает дополнительную функциональность модуля PCRE,
|
||
которая несовместима с Perl. С этим модификатором парсер обрабатывает
|
||
шаблон и входную строку как строку в кодировке UTF-8.
|
||
Недопустимая входная строка приводит к тому, что функции preg_*
|
||
ничего не находят, а неправильный шаблон приводит к ошибке
|
||
уровня E_WARNING. Пятый и шестой октеты последовательности UTF-8
|
||
рассматриваются недопустимыми.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
<varlistentry>
|
||
<term><emphasis>n</emphasis> (<literal>PCRE_NO_AUTO_CAPTURE</literal>)</term>
|
||
<listitem>
|
||
<simpara>
|
||
Модификатор делает простые группы <code>(xyz)</code> незахватываемыми.
|
||
Перехватываются только именованные группы наподобие <code>(?<name>xyz)</code>.
|
||
Это влияет только на то, какие группы парсер перехватит.
|
||
По-прежнему разрешено пользоваться нумерованными ссылками на подшаблоны,
|
||
а массив совпадений по-прежнему будет содержать нумерованные результаты. Модификатор доступен с PHP 8.2.0.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
</variablelist>
|
||
</blockquote>
|
||
</para>
|
||
</article>
|
||
<!-- Keep this comment at the end of the file
|
||
Local variables:
|
||
mode: sgml
|
||
sgml-omittag:t
|
||
sgml-shorttag:t
|
||
sgml-minimize-attributes:nil
|
||
sgml-always-quote-attributes:t
|
||
sgml-indent-step:1
|
||
sgml-indent-data:t
|
||
indent-tabs-mode:nil
|
||
sgml-parent-document:nil
|
||
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
||
sgml-exposed-tags:nil
|
||
sgml-local-catalogs:nil
|
||
sgml-local-ecat-files:nil
|
||
End:
|
||
vim600: syn=xml fen fdm=syntax fdl=2 si
|
||
vim: et tw=78 syn=sgml
|
||
vi: ts=1 sw=1
|
||
-->
|