<?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 => 'zh',
  ),
  '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' => 'zh',
    '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>Internal option letters</strong></caption>
    
     <tbody class="tbody">
      <tr>
       <td><code class="literal">i</code></td>
       <td>for <a href="reference.pcre.pattern.modifiers.php" class="link">PCRE_CASELESS</a></td>
      </tr>

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

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

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

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

      <tr>
       <td><code class="literal">X</code></td>
       <td>for <a href="reference.pcre.pattern.modifiers.php" class="link">PCRE_EXTRA</a></td>
      </tr>

      <tr>
       <td><code class="literal">J</code></td>
       <td>for <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) 标记设定有些特殊，它必须出现在任何其他特性之前，
  最好放在最开头的位置。
  </p>
 </div><?php manual_footer($setup); ?>