<?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.escape.php',
    1 => 'エスケープシーケンス',
    2 => 'エスケープシーケンス',
  ),
  'up' => 
  array (
    0 => 'reference.pcre.pattern.syntax.php',
    1 => 'PCRE 正規表現構文',
  ),
  'prev' => 
  array (
    0 => 'regexp.reference.meta.php',
    1 => 'メタ文字',
  ),
  'next' => 
  array (
    0 => 'regexp.reference.unicode.php',
    1 => 'Unicode 文字プロパティ',
  ),
  '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.escape" class="section">
  <h2 class="title">エスケープシーケンス</h2>
     <p class="para">
      バックスラッシュ〔日本語環境では円記号となる場合もある〕には、
      いくつかの使用法があります。ひとつめの使用法は、
      非英数字の前に記述する場合で、続く文字が表す特別な意味を取り去ります。
      このエスケープ文字としての使用法は、
      文字クラスの内外部いずれでも可能です。
     </p>
     <p class="para">
      たとえば、&quot;*&quot; 文字とマッチさせたい場合は、パターンを &quot;\*&quot; と記述します。
      続く文字がメタ文字として解釈されるものであるかには関係ありませんので、
      いかなる非英数字に対しても、&quot;\&quot; を付けると、その文字自体が
      表わされることになります。特に、
      バックスラッシュとマッチさせたい場合は、&quot;\\&quot; と記述します。
     </p>
     <blockquote class="note"><p><strong class="note">注意</strong>: 
      <p class="para">
       シングルクォートあるいはダブルクォートで囲まれた PHP の
       <a href="language.types.string.php#language.types.string.syntax" class="link">文字列</a>
       の中では、バックスラッシュは特別な意味を表します。
       そのため、正規表現 \\ を使用して \ とマッチさせたい場合は
       PHP のコード内では &quot;\\\\&quot; あるいは &#039;\\\\&#039; と記述する必要があります。
      </p>
     </p></blockquote>
     <p class="para">
     パターンを、
     <a href="reference.pcre.pattern.modifiers.php" class="link">PCRE_EXTENDED</a>
     オプションを付けてコンパイルすると、（文字クラス内部を除き）
     パターン中の空白文字、および &quot;#&quot; とその次の改行文字との間の文字は
     無視されます。空白文字や &quot;#&quot; をパターン中に含めるには、
     バックスラッシュを用いてエスケープします。
     </p>
     <p class="para">
      バックスラッシュの 2 番目の使用法は、非表示文字〔制御コードなど〕を
      パターン中に目に見える形で記述するための方法です。ヌル文字は
      パターンを終了させてしまうため使えませんが、その他の非表示文字は、
      パターンにそのまま含めても問題はありません。しかし、パターンの編集には、
      バイナリ文字をそのまま用いるよりも、以下に示すエスケープシーケンスを
      用いる方が便利でしょう。
     </p>
     <p class="para">
      <dl>
       
        <dt><em>\a</em></dt>
        <dd>
         <span class="simpara">アラーム、ベル文字 (16進 07)</span>
        </dd>
       
       
        <dt><em>\cx</em></dt>
        <dd>
         <span class="simpara">&quot;control-x&quot;, ここで x は任意の文字</span>
        </dd>
       
       
        <dt><em>\e</em></dt>
        <dd>
         <span class="simpara">エスケープ文字 (16進 1B)</span>
        </dd>
       
       
        <dt><em>\f</em></dt>
        <dd>
         <span class="simpara">改ページ (formfeed) (16進 0C)</span>
        </dd>
       
       
        <dt><em>\n</em></dt>
        <dd>
         <span class="simpara">改行 (newline) (16進 0A)</span>
        </dd>
       
       
        <dt><em>\p{xx}</em></dt>
        <dd>
         <span class="simpara">
          xx プロパティを持つ文字、詳細は
          <a href="regexp.reference.unicode.php" class="link">unicode プロパティ</a>
          を参照
         </span>
        </dd>
       
       
        <dt><em>\P{xx}</em></dt>
        <dd>
         <span class="simpara">
          xx プロパティを持たない文字、詳細は
          <a href="regexp.reference.unicode.php" class="link">unicode プロパティ</a>
          を参照
         </span>
        </dd>
       
       
        <dt><em>\r</em></dt>
        <dd>
         <span class="simpara">復帰 (carriage return) (16進 0D)</span>
        </dd>
       
    
     <dt><em>\R</em></dt>
     <dd>
      <span class="simpara">改行: \n、\r、\r\n にマッチする</span>
     </dd>
    
       
        <dt><em>\t</em></dt>
        <dd>
         <span class="simpara">タブ (16進 09)</span>
        </dd>
       
       
        <dt><em>\xhh</em></dt>
        <dd>
         <span class="simpara">
          16 進コードで hh の文字
         </span>
        </dd>
       
       
        <dt><em>\ddd</em></dt>
        <dd>
         <span class="simpara">8 進コードで ddd の文字、もしくは、後方参照</span>
        </dd>
       
      </dl>
     </p>
     <p class="para">
      &quot;<code class="literal">\cx</code>&quot; の正確な働きは、次の通りです。
      &quot;<code class="literal">x</code>&quot;  が小文字の場合、
      大文字に変換されます。続いて、文字の 6 ビット目 (16進数 40) が
      反転されます。つまり、&quot;<code class="literal">\cz</code>&quot; は 16 進数の 1A になり、
      &quot;<code class="literal">\c{</code>&quot; は 3B になり、
      &quot;<code class="literal">\c;</code>&quot; は 7B になります。
     </p>
     <p class="para">      
      &quot;<code class="literal">\x</code>&quot; の後では、2 桁までの 16 進数が読まれます
      （大小文字どちらも可能です）。
      <em>UTF-8 モード</em> では、
      &quot;<code class="literal">\x{...}</code>&quot; という記法も使えます。
      この場合、波括弧の中身は16進数を示す文字列です。
      この文字列は、16進数の数値でコードポイントを表す UTF-8 文字として解釈されます。
      オリジナルの16進のエスケープシーケンス <code class="literal">\xhh</code> は、
      値が127より大きい場合、2バイトのUTF-8 文字とマッチします。
     </p>
     <p class="para">
      &quot;\0&quot; の後では、さらに 2 桁の 8 進数が
      読みこまれます。いずれの場合も、2 桁より少ない場合、桁があるだけ
      読みこまれます。つまり、&quot;<code class="literal">\0\x\07</code>&quot; は
      ヌル文字 2 つの後にベル文字が
      続いたものを表します。8 進数を指定する場合は、必ず最初のゼロに続いて
      残りの 2 桁の数字を指定するように注意してください。
     </p>
     <p class="para">
      バックスラッシュの後に 0 以外の数字が続く場合の処理は複雑です。
      文字クラスの外部では、 PCRE は、続く数字全体を 10 進数として読みます。
      数字が 10 よりも小さい場合、または、正規表現の中に含まれる
      キャプチャ用左カッコの数以下の場合、
      <em>後方参照</em> として解釈されます。
      この動作に関する詳しい説明は、後ほど、カッコによるサブパターンの説明を
      行ってから示します
     </p>
     <p class="para">
      文字クラスの中、または、指定された 10 進数が 9 より大きく、
      キャプチャ用サブパターンの数がこの数に満たない場合は、PCRE は
      バックスラッシュの後から最大 3 文字の 8 進数を再度読みこみ、
      その値の最下位 8 ビットから 1 バイトを生成します。
      その後に続く数字は、それ自体を表します。以下に例を示します。
     </p>
     <p class="para">
      <dl>
       
        <dt><em>\040</em></dt>
        <dd>
         <span class="simpara">
          スペースの別の表記法
         </span>
        </dd>
       
       
        <dt><em>\40</em></dt>
        <dd>
         <span class="simpara">
          上と同じ。ただし、キャプチャ用サブパターンが 40 個未満の場合
         </span>
        </dd>
       
       
        <dt><em>\7</em></dt>
           <dd>
         <span class="simpara">
          常に後方参照
         </span>
        </dd>
       
       
        <dt><em>\11</em></dt>
        <dd>
         <span class="simpara">
          後方参照、または、タブの別記法
         </span>
        </dd>
       
       
        <dt><em>\011</em></dt>
        <dd>
         <span class="simpara">
          常にタブ
         </span>
        </dd>
       
       
        <dt><em>\0113</em></dt>
        <dd>
         <span class="simpara">
          タブの後に文字 &quot;3&quot; が続いたもの
         </span>
        </dd>
       
       
        <dt><em>\113</em></dt>
        <dd>
         <span class="simpara">
          8進コードで 113 の文字
          (99 を超える後方参照は存在しないため)
         </span>
        </dd>
       
       
        <dt><em>\377</em></dt>
        <dd>
         <span class="simpara">
          全ビットが 1 である 1 バイト
         </span>
        </dd>
       
       
        <dt><em>\81</em></dt>
           <dd>
         <span class="simpara">
          後方参照、または、ヌル文字の後に 2つの文字 
            &quot;8&quot; および &quot;1&quot; が続いたもの
         </span>
        </dd>
       
     </dl>
    </p>
    <p class="para">
     3 桁を超えて 8 進数は読みこまれないため、100 以上の 8 進数には
     ゼロを前につけてはいけないことに注意してください。
    </p>
    <p class="para">
     これらの 1 バイト値を定義するエスケープシーケンスは、
     文字クラスの内外部のいずれでも使用できます。加えて、文字クラス内では
     エスケープシーケンス &quot;<code class="literal">\b</code>&quot; はバックスペース (16進 08) として解釈されます。
     文字クラス外では、別の意味を有します（別記参照）。
    </p>
    <p class="para">
     バックスラッシュの第 3 の使用法は、包括的な文字型を指定する用途です。
    </p>
    <p class="para">
      <dl>
       
        <dt><em>\d</em></dt>
        <dd>
         <span class="simpara">
          10 進数字 
         </span>
        </dd>
       
       
        <dt><em>\D</em></dt>
        <dd>
         <span class="simpara">
           10 進数字でない文字
         </span>
        </dd>
       
       
       <dt><em>\h</em></dt>
       <dd><span class="simpara">水平方向の空白文字</span></dd>
      
      
       <dt><em>\H</em></dt>
       <dd><span class="simpara">水平方向の空白文字でない文字</span></dd>
      
      
        <dt><em>\s</em></dt>
        <dd>
         <span class="simpara">
          空白文字
         </span>
        </dd>
       
       
        <dt><em>\S</em></dt>
        <dd>
         <span class="simpara">
          空白文字でない文字
         </span>
        </dd>
       
       
       <dt><em>\v</em></dt>
       <dd><span class="simpara">垂直方向の空白文字</span></dd>
      
      
       <dt><em>\V</em></dt>
       <dd><span class="simpara">垂直方向の空白文字でない文字</span></dd>
      
      
        <dt><em>\w</em></dt>
        <dd>
         <span class="simpara">
          単語構成文字 (word character) 
         </span>
        </dd>
       
       
        <dt><em>\W</em></dt>
        <dd>
         <span class="simpara">
          非単語構成文字 (non-word character)
         </span>
        </dd>
       
      </dl>
     </p>
     <p class="para">
      これらエスケープシーケンスの各組により、文字集合が 2 つに分割されます。
      文字は、各組のどちらか片方だけにマッチします。
     </p>
     <p class="para">
      空白文字とは HT (9)、LF (10)、FF (12)、CR (13)、スペース (32) のことです。
      しかし、ロケールを指定したマッチングを行った場合には、
      128から255までのコードポイントの文字
      (たとえば NBSP (A0)) も空白文字とみなされる可能性があります。
     </p>
     <p class="para">
      単語構成文字とは、英字または数字またはアンダースコア文字であり、Perl
      が定義するところの「単語」と成り得る文字のことです。文字および数字の
      定義は、PCRE の文字テーブルにより制御され、ロケールを指定して
      マッチングを行うと変わる可能性があります。
      例えば、&quot;fr&quot; （フランス語）ロケールの場合、128 を超える
      文字コードのいくつかは、アクセント付きの文字に使われており、
      これらは <code class="literal">\w</code> とマッチします。
     </p>
     <p class="para">
     これらの文字型表記は、文字クラスの内外によらず使用可能で、
     対応する型のたかだか 1 文字とマッチします。現在のマッチング位置が
     検索対象文字列の終端である場合、マッチできる文字が無いので、
     マッチは失敗します。
     </p>
     <p class="para">
     バックスラッシュの第 4 の使用法は、簡単な言明 (assertion) です。
     言明とは、マッチがある特定の位置でだけ可能だという条件を指定するもので、
     検索対象文字列から文字を消費 (consume)〔つまり文字自体にマッチ〕
     しません。サブパターンを使ったより複雑な言明の方法もありますが、
     それについての解説は後ほど行います。バックスラッシュを使った言明は、
     次のものがあります
     </p>
     <p class="para">
      <dl>
       
        <dt><em>\b</em></dt>
        <dd>
         <span class="simpara">
          単語境界 
         </span>
        </dd>
       
       
        <dt><em>\B</em></dt>
        <dd>
         <span class="simpara">
          非単語境界
         </span>
        </dd>
       
       
        <dt><em>\A</em></dt>
        <dd>
         <span class="simpara">
          検索対象文字列の始端（複数行モードとは独立）
         </span>
        </dd>
       
       
        <dt><em>\Z</em></dt>
        <dd>
         <span class="simpara">
         検索対象文字列の終端、または終端の改行（複数行モードとは独立） 
         </span>
        </dd>
       
       
        <dt><em>\z</em></dt>
        <dd>
         <span class="simpara">
          検索対象文字列の終端（複数行モードとは独立）
         </span>
        </dd>
       
       
         <dt><em>\G</em></dt>
         <dd><span class="simpara">マッチングの開始位置</span></dd>
      
      </dl>
     </p>
     <p class="para">
      これらの言明は、文字クラス内では使用できません（また、文字クラス内では、
       &quot;<code class="literal">\b</code>&quot; はバックスペース文字という別の意味を持つので
       注意してください）。
     </p>
     <p class="para">
      単語境界 (word boundary) とは、検索対象文字列において、
      カレントの文字およびその前の文字が同時に <code class="literal">\w</code> 
      もしくは <code class="literal">\W</code> にマッチしない（すなわち、片方が 
      <code class="literal">\w</code> にマッチし、もう片方が <code class="literal">\W</code>
      にマッチする）位置、もしくは、文字列の始めか終わりで、
      その始めか終わりの文字が <code class="literal">\w</code> にマッチする位置の
      ことです。
     </p>
     <p class="para">      
      言明 <code class="literal">\A</code>, <code class="literal">\Z</code>, 
      <code class="literal">\z</code> は、（<a href="regexp.reference.anchors.php" class="link">アンカー</a> で説明する）ハット記号やドル記号とは
      異なり、オプション設定によらず、文字列の始端または終端だけに
      マッチします。これらの言明は、<a href="reference.pcre.pattern.modifiers.php" class="link">PCRE_MULTILINE</a> および <a href="reference.pcre.pattern.modifiers.php" class="link">PCRE_DOLLAR_ENDONLY</a> 
      オプションの影響を受けません。
      <code class="literal">\Z</code> と <code class="literal">\z</code> との違いは、
      <code class="literal">\Z</code> は文字列の末尾の改行の前の位置および文字列の
      終端にマッチするのに対し、<code class="literal">\z</code> は文字列の終端にのみ
      マッチすることです。
     </p>
     <p class="para">
      言明 <code class="literal">\G</code> は、カレントのマッチング位置が、
      <span class="function"><a href="function.preg-match.php" class="function">preg_match()</a></span> 関数の <code class="parameter">offset</code>
      引数に指定されたマッチングの開始位置である場合に真になります。
      <code class="parameter">offset</code> が非ゼロの場合は、<code class="literal">\A</code>
      と等価ではありません。
     </p>
     
     <p class="para">
      <code class="literal">\Q</code> と <code class="literal">\E</code> とを使って、
      パターン中のメタ文字を無視させることができます。
      たとえば、
      <code class="literal">\w+\Q.$.\E$</code>
      は、文字列の終端において1つ以上の単語構成文字のあとに <code class="literal">.$.</code> 
      というリテラルが続いたものにマッチします。

      これらは、デリミタの動作を変更しないことに注意して下さい。
      たとえば、<code class="literal">#\Q#\E#$</code> は無効なパターンです。
      なぜなら、<code class="literal">#</code> がパターンの終端としてマークされ、
      <code class="literal">\E#</code> が無効な修正子と解釈されるからです。
     </p>

     <p class="para">
      <code class="literal">\K</code> を使用すると、マッチの開始位置をリセットできます。
      たとえば、パターン
      <code class="literal">foo\Kbar</code> は &quot;foobar&quot; にマッチしますが、
      結果は &quot;bar&quot; にマッチしたと報告されます。
      <code class="literal">\K</code> を使用しても、キャプチャした部分文字列には影響を及ぼしません。
      たとえば、パターン <code class="literal">(foo)\Kbar</code> が
      &quot;foobar&quot; にマッチしたときの最初の部分文字列は &quot;foo&quot; です。
     </p>
     
    </div><?php manual_footer($setup); ?>