<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/reference.pcre.pattern.syntax.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'ru',
  ),
  'this' => 
  array (
    0 => 'regexp.reference.internal-options.php',
    1 => 'Установка внутренних опций',
    2 => 'Установка внутренних опций',
  ),
  'up' => 
  array (
    0 => 'reference.pcre.pattern.syntax.php',
    1 => 'Синтаксис регулярных выражений',
  ),
  'prev' => 
  array (
    0 => 'regexp.reference.alternation.php',
    1 => 'Альтернативный выбор',
  ),
  'next' => 
  array (
    0 => 'regexp.reference.subpatterns.php',
    1 => 'Подшаблоны',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'ru',
    'path' => 'reference/pcre/pattern.syntax.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="regexp.reference.internal-options" class="section">
  <h2 class="title">Установка внутренних опций</h2>
  <p class="para">
   Установки модификаторов <a href="reference.pcre.pattern.modifiers.php" class="link">PCRE_CASELESS</a>,
   <a href="reference.pcre.pattern.modifiers.php" class="link">PCRE_MULTILINE</a>,
   <a href="reference.pcre.pattern.modifiers.php" class="link">PCRE_DOTALL</a>,
   <a href="reference.pcre.pattern.modifiers.php" class="link">PCRE_UNGREEDY</a>,
   <a href="reference.pcre.pattern.modifiers.php" class="link">PCRE_EXTRA</a>,
   <a href="reference.pcre.pattern.modifiers.php" class="link">PCRE_EXTENDED</a>
   и PCRE_DUPNAMES, которые влияют на шаблон глобально, переопределяют внутри шаблона
   буквами внутренних опций языка Perl, которые указывают между символами «(?» и «)». Буквы опций:

   <table class="doctable table">
    <caption><strong>Буквы внутренних опций</strong></caption>
    
     <tbody class="tbody">
      <tr>
       <td><code class="literal">i</code></td>
       <td><a href="reference.pcre.pattern.modifiers.php" class="link">PCRE_CASELESS</a></td>
      </tr>

      <tr>
       <td><code class="literal">m</code></td>
       <td><a href="reference.pcre.pattern.modifiers.php" class="link">PCRE_MULTILINE</a></td>
      </tr>

      <tr>
       <td><code class="literal">s</code></td>
       <td><a href="reference.pcre.pattern.modifiers.php" class="link">PCRE_DOTALL</a></td>
      </tr>

      <tr>
       <td><code class="literal">x</code></td>
       <td><a href="reference.pcre.pattern.modifiers.php" class="link">PCRE_EXTENDED</a></td>
      </tr>

      <tr>
       <td><code class="literal">U</code></td>
       <td><a href="reference.pcre.pattern.modifiers.php" class="link">PCRE_UNGREEDY</a></td>
      </tr>

      <tr>
       <td><code class="literal">X</code></td>
       <td><a href="reference.pcre.pattern.modifiers.php" class="link">PCRE_EXTRA</a> (не поддерживается с PHP 7.3)</td>
      </tr>

      <tr>
       <td><code class="literal">J</code></td>
       <td><a href="reference.pcre.pattern.modifiers.php" class="link">PCRE_INFO_JCHANGED</a></td>
      </tr>

     </tbody>
    
   </table>

  </p>
  <p class="para">
   Шаблон (?im), например, устанавливает регистронезависимое многострочное сопоставление.
   Перед опцией, которую нужно сбросить, ставят символ «-» или комбинируют
   установку и отмену режимов. Запись (?im-sx), например, устанавливает флаги
   <a href="reference.pcre.pattern.modifiers.php" class="link">PCRE_CASELESS</a>,
   <a href="reference.pcre.pattern.modifiers.php" class="link">PCRE_MULTILINE</a>
   и отменяет флаги <a href="reference.pcre.pattern.modifiers.php" class="link">PCRE_DOTALL</a>
   и <a href="reference.pcre.pattern.modifiers.php" class="link">PCRE_EXTENDED</a>.
   Модуль отменит опцию, если символ расположили одновременно до и после
   символа «-».
  </p>
  <p class="para">
   Парсер применит изменение к оставшейся части шаблона,
   если опцию изменяют на верхнем уровне (т. е. вне круглых скобок подшаблона).
   Поэтому шаблон <code class="literal">/ab(?i)c/</code> совпадёт только со значениями «abc» и «abC».
  </p>
  <p class="para">
   Эффект будет другим, если опцию изменяют внутри подшаблона.
   Это изменение поведения в Perl 5.005. Изменение опции внутри подшаблона повлияет
   только на ту часть шаблона, которая следует за ним, то есть шаблон

   <code class="literal">(a(?i)b)c</code>

   совпадёт с «abc» и «aBc» и больше ни с чем (разумеется, если
   не включили режим <a href="reference.pcre.pattern.modifiers.php" class="link">PCRE_CASELESS</a>).
   Это означает, что опции умеют задавать разные настройки в разных частях шаблона.
   Изменения в одной альтернативе переносятся и в другие ветки в пределах того же подшаблона.
   Например, шаблон

   <code class="literal">(a(?i)b|c)</code>

   совпадёт с «ab», «aB», «c», и «C», хотя и при совпадении с «C» первая ветка
   была отброшена до установки опции. Это происходит потому, что модуль устанавливает
   опции на этапе компиляции. В противном случае поведение было бы странным.
  </p>
  <p class="para">
   Специфичные для модуля PCRE опции, например
   <a href="reference.pcre.pattern.modifiers.php" class="link">PCRE_UNGREEDY</a>
   и <a href="reference.pcre.pattern.modifiers.php" class="link">PCRE_EXTRA</a>,
   разрешено устанавливать так же, как и Perl-совместимые опции, —
   через символы U и X.

   Установка флага (?X) отличается тем, что должен быть расположен в шаблоне прежде, чем будет
   установлена любая другая дополнительная возможность, даже если его расположили
   на верхнем уровне. Рекомендовано размещать флаг (?X) в самом начале шаблона.
  </p>
 </div><?php manual_footer($setup); ?>