<?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 => 'ja',
  ),
  'this' => 
  array (
    0 => 'regexp.reference.internal-options.php',
    1 => '内部オプション設定',
    2 => '内部オプション設定',
  ),
  'up' => 
  array (
    0 => 'reference.pcre.pattern.syntax.php',
    1 => 'PCRE 正規表現構文',
  ),
  'prev' => 
  array (
    0 => 'regexp.reference.alternation.php',
    1 => '選択肢',
  ),
  'next' => 
  array (
    0 => 'regexp.reference.subpatterns.php',
    1 => 'サブパターン',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'ja',
    '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 
       オプション文字を &quot;(?&quot; と &quot;)&quot; とで括った並びを用います。
       オプション文字には以下のものがあります。

      <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.0 以降はサポートされません) </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> は &quot;abc&quot; および &quot;abC&quot; にマッチします。
     </p>
     <p class="para">
      サブパターンの内部でオプションの変更を行った場合は、
      その効果は違ったものになります。この動作変更は、Perl 5.005 
      で行われました。サブパターン中のオプション変更は、そのサブパターンの
      設定が行われた場所以降の部分にのみ影響します。そのため、パターン

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

      は、&quot;abc&quot; および &quot;aBc&quot; にマッチし、他の文字列にはマッチしません
      （<a href="reference.pcre.pattern.modifiers.php" class="link">PCRE_CASELESS</a> 
      が設定されていないと仮定）。このように、パターンの各場所に
      異なった設定を行うようなオプション指定が可能です。
      ある選択肢に行われた設定変更は、同じサブパターン中の後に続く選択肢に
      波及します。例えば、パターン

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

      は、&quot;ab&quot;, &quot;aB&quot;, &quot;c&quot;, &quot;C&quot; にマッチします。&quot;C&quot; にマッチする場合を
      見てみると、オプション設定が行われている最初の選択肢は
      マッチせずに捨てられてしまっています。それでも、オプションの設定は
      行われ &quot;C&quot; にマッチします。これは、オプション設定の効果が
      コンパイル時に生じることによります。さもないと、
      非常に奇妙な動作をするかもしれません。
     </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> は、
      それぞれ文字 U および X を用いて、Perl 互換のオプションと同様に
      変更することが可能です。 (?X) フラグの設定は特別で、最上位においても、
      パターン中で他の設定を有効にする前に指定する必要があります。
      このフラグは、最初に指定するのが最善です。
     </p>
    </div><?php manual_footer($setup); ?>