mirror of
https://github.com/php/doc-ru.git
synced 2026-04-27 01:08:05 +02:00
212 lines
12 KiB
XML
212 lines
12 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
||
<!-- EN-Revision: bcb7074498301e4712576a18849821f99f0fbaea Maintainer: shein Status: ready -->
|
||
<!-- Reviewed: yes -->
|
||
<!-- $Revision$ -->
|
||
<article xml:id="reference.pcre.pattern.modifiers" xmlns="http://docbook.org/ns/docbook">
|
||
<title>Модификаторы шаблонов</title>
|
||
<titleabbrev>Описывает возможные модификаторы шаблонов Perl-совместимых регулярных выражений (PCRE)</titleabbrev>
|
||
<para>
|
||
Ниже перечислены все доступные на сегодняшний день модификаторы.
|
||
Имя, взятое в круглые скобки, указывает внутреннее 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.
|
||
В случае, если обрабатываемый текст не содержит символов
|
||
перевода строки, либо шаблон не содержит метасимволов '^'
|
||
или '$', данный модификатор не имеет никакого эффекта.
|
||
</simpara>
|
||
</listitem>
|
||
</varlistentry>
|
||
<varlistentry>
|
||
<term><emphasis>s</emphasis> (<literal>PCRE_DOTALL</literal>)</term>
|
||
<listitem>
|
||
<simpara>
|
||
Если данный модификатор используется, метасимвол "точка"
|
||
в шаблоне соответствует всем символам, включая перевод
|
||
строк. Без него - все символы, кроме переводов строк.
|
||
Этот модификатор эквивалентен записи /s в Perl.
|
||
Класс символов, построенный на отрицании, например [^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>
|
||
</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
|
||
-->
|