1
0
mirror of https://github.com/php/doc-ru.git synced 2026-04-27 01:08:05 +02:00
Files
archived-doc-ru/reference/pcre/pattern.modifiers.xml
T
2021-05-04 16:46:43 +03:00

212 lines
12 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?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
-->