<?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.unicode.php',
    1 => 'Unicode 文字プロパティ',
    2 => 'Unicode 文字プロパティ',
  ),
  'up' => 
  array (
    0 => 'reference.pcre.pattern.syntax.php',
    1 => 'PCRE 正規表現構文',
  ),
  'prev' => 
  array (
    0 => 'regexp.reference.escape.php',
    1 => 'エスケープシーケンス',
  ),
  'next' => 
  array (
    0 => 'regexp.reference.anchors.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.unicode" class="section">
     <h2 class="title">Unicode 文字プロパティ</h2>
     <p class="para">
      PHP 5.1.0 以降、<em>UTF-8 モード</em> を設定した場合に、
      一般的な文字タイプにマッチする新たなエスケープシーケンスが 3 つ追加されました。
     </p>
     <dl>
      
       <dt><em>\p{xx}</em></dt>
       <dd><span class="simpara">xx プロパティを持つ文字</span></dd>
      
      
       <dt><em>\P{xx}</em></dt>
       <dd><span class="simpara">xx プロパティを持たない文字</span></dd>
      
      
       <dt><em>\X</em></dt>
       <dd><span class="simpara">拡張 Unicode シーケンス</span></dd>
      
     </dl>
     <p class="para">
      ここで <code class="literal">xx</code> で表されているプロパティ名は、Unicode で
      一般カテゴリプロパティ (general category properties) として規定されているものに
      なります。すべての文字は、いずれかひとつのプロパティを持ちます。
      プロパティは、2 文字の略語で表されます。Perl と同じく、
      開き波カッコとプロパティ名との間にハット文字を記述することで否定を指定できます。
      たとえば、<code class="literal">\p{^Lu}</code> は <code class="literal">\P{Lu}</code> と同じです。
     </p>
     <p class="para">
      <code class="literal">\p</code> もしくは <code class="literal">\P</code> の後に、一文字だけを記述すると
      その文字で始まるすべてのプロパティが指定されたことになります。
      この場合、否定の指定をしていない場合、波カッコを使用しなくても構いません。
      以下の 2 つの例は等価になります。
     </p>
  <div class="informalexample">
   <div class="example-contents">
<div class="annotation-interactive cdata"><pre>
\p{L}
\pL
</pre></div>
   </div>

  </div>
     <table class="doctable table">
      <caption><strong>使用可能なプロパティコード</strong></caption>
      
       <thead>
        <tr>
         <th>プロパティ</th>
         <th>マッチ</th>
         <th>備考</th>
        </tr>

       </thead>

       <tbody class="tbody">
        <tr>
         <td><code class="literal">C</code></td>
         <td>その他 (Other)</td>
         <td class="empty">&nbsp;</td>
        </tr>

        <tr>
         <td><code class="literal">Cc</code></td>
         <td>コントロール文字 (Control)</td>
         <td class="empty">&nbsp;</td>
        </tr>

        <tr>
         <td><code class="literal">Cf</code></td>
         <td>非可視整形用文字 (Format)</td>
         <td class="empty">&nbsp;</td>
        </tr>

        <tr>
         <td><code class="literal">Cn</code></td>
         <td>未定義コードポイント (Unassigned)</td>
         <td class="empty">&nbsp;</td>
        </tr>

        <tr>
         <td><code class="literal">Co</code></td>
         <td>私的利用領域 (Private use)</td>
         <td class="empty">&nbsp;</td>
        </tr>

        <tr>
         <td><code class="literal">Cs</code></td>
         <td>サロゲート (Surrogate)</td>
         <td class="empty">&nbsp;</td>
        </tr>

        <tr>
         <td><code class="literal">L</code></td>
         <td>アルファベット (Letter)</td>
         <td>
          <code class="literal">Ll</code>、
          <code class="literal">Lm</code>、<code class="literal">Lo</code>、<code class="literal">Lt</code> および
          <code class="literal">Lu</code> を含む
         </td>
        </tr>

        <tr>
         <td><code class="literal">Ll</code></td>
         <td>小文字アルファベット (Lower case letter)</td>
         <td class="empty">&nbsp;</td>
        </tr>

        <tr>
         <td><code class="literal">Lm</code></td>
         <td>擬似文字 (Modifier letter)</td>
         <td class="empty">&nbsp;</td>
        </tr>

        <tr>
         <td><code class="literal">Lo</code></td>
         <td>その他の文字 (Other letter)</td>
         <td class="empty">&nbsp;</td>
        </tr>

        <tr>
         <td><code class="literal">Lt</code></td>
         <td>タイトル文字 (Title case letter)</td>
         <td class="empty">&nbsp;</td>
        </tr>

        <tr>
         <td><code class="literal">Lu</code></td>
         <td>大文字アルファベット (Upper case letter)</td>
         <td class="empty">&nbsp;</td>
        </tr>

        <tr>
         <td><code class="literal">M</code></td>
         <td>記号 (Mark)</td>
         <td class="empty">&nbsp;</td>
        </tr>

        <tr>
         <td><code class="literal">Mc</code></td>
         <td>修飾文字 (Spacing mark)</td>
         <td class="empty">&nbsp;</td>
        </tr>

        <tr>
         <td><code class="literal">Me</code></td>
         <td>他の文字を囲むための文字 (Enclosing mark)</td>
         <td class="empty">&nbsp;</td>
        </tr>

        <tr>
         <td><code class="literal">Mn</code></td>
         <td>他の文字を修飾するための文字 (Non-spacing mark)</td>
         <td class="empty">&nbsp;</td>
        </tr>

        <tr>
         <td><code class="literal">N</code></td>
         <td>数字 (Number)</td>
         <td class="empty">&nbsp;</td>
        </tr>

        <tr>
         <td><code class="literal">Nd</code></td>
         <td>10 進数字 (Decimal number)</td>
         <td class="empty">&nbsp;</td>
        </tr>

        <tr>
         <td><code class="literal">Nl</code></td>
         <td>数値を表す文字 (Letter number)</td>
         <td class="empty">&nbsp;</td>
        </tr>

        <tr>
         <td><code class="literal">No</code></td>
         <td>その他の数字 (Other number)</td>
         <td class="empty">&nbsp;</td>
        </tr>

        <tr>
         <td><code class="literal">P</code></td>
         <td>句読記号 (Punctuation)</td>
         <td class="empty">&nbsp;</td>
        </tr>

        <tr>
         <td><code class="literal">Pc</code></td>
         <td>連結用句読記号 (Connector punctuation)</td>
         <td class="empty">&nbsp;</td>
        </tr>

        <tr>
         <td><code class="literal">Pd</code></td>
         <td>ダッシュ (Dash punctuation)</td>
         <td class="empty">&nbsp;</td>
        </tr>

        <tr>
         <td><code class="literal">Pe</code></td>
         <td>閉じ句読記号 (Close punctuation)</td>
         <td class="empty">&nbsp;</td>
        </tr>

        <tr>
         <td><code class="literal">Pf</code></td>
         <td>末尾句読記号 (Final punctuation)</td>
         <td class="empty">&nbsp;</td>
        </tr>

        <tr>
         <td><code class="literal">Pi</code></td>
         <td>先頭句読記号 (Initial punctuation)</td>
         <td class="empty">&nbsp;</td>
        </tr>

        <tr>
         <td><code class="literal">Po</code></td>
         <td>その他の句読記号 (Other punctuation)</td>
         <td class="empty">&nbsp;</td>
        </tr>

        <tr>
         <td><code class="literal">Ps</code></td>
         <td>開き句読記号 (Open punctuation)</td>
         <td class="empty">&nbsp;</td>
        </tr>

        <tr>
         <td><code class="literal">S</code></td>
         <td>記号 (Symbol)</td>
         <td class="empty">&nbsp;</td>
        </tr>

        <tr>
         <td><code class="literal">Sc</code></td>
         <td>通貨記号 (Currency symbol)</td>
         <td class="empty">&nbsp;</td>
        </tr>

        <tr>
         <td><code class="literal">Sk</code></td>
         <td>合わせ文字 (Modifier symbol)</td>
         <td class="empty">&nbsp;</td>
        </tr>

        <tr>
         <td><code class="literal">Sm</code></td>
         <td>数学記号 (Mathematical symbol)</td>
         <td class="empty">&nbsp;</td>
        </tr>

        <tr>
         <td><code class="literal">So</code></td>
         <td>その他の記号 (Other symbol)</td>
         <td>絵文字(emoji)も含みます</td>
        </tr>

        <tr>
         <td><code class="literal">Z</code></td>
         <td>区切り文字 (Separator)</td>
         <td class="empty">&nbsp;</td>
        </tr>

        <tr>
         <td><code class="literal">Zl</code></td>
         <td>行区切り文字 (Line separator)</td>
         <td class="empty">&nbsp;</td>
        </tr>

        <tr>
         <td><code class="literal">Zp</code></td>
         <td>段落区切り文字 (Paragraph separator)</td>
         <td class="empty">&nbsp;</td>
        </tr>

        <tr>
         <td><code class="literal">Zs</code></td>
         <td>空白文字 (Space separator)</td>
         <td class="empty">&nbsp;</td>
        </tr>

       </tbody>
      
     </table>

     <p class="para">
      <code class="literal">InMusicalSymbols</code> のような拡張プロパティ (extended properties)
      を、PCRE はサポートしていません。
     </p>
     <p class="para">
      大小文字を区別しないマッチングを設定していても、これらのエスケープ
      シーケンスには影響しません。たとえば、<code class="literal">\p{Lu}</code> は
      常に大文字にのみマッチします。
     </p>
  <p class="para">
   Unicode の文字は、何らかのスクリプトに属するものとして定義されています。
   スクリプト名を指定すれば、そのスクリプトの文字群の一文字にマッチさせることができます。
   たとえば、次のように使います。
  </p>
  <ul class="itemizedlist">
   <li class="listitem">
    <span class="simpara"><code class="literal">\p{Greek}</code></span>
   </li>
   <li class="listitem">
    <span class="simpara"><code class="literal">\P{Han}</code></span>
   </li>
  </ul>
  <p class="para">
   どのスクリプトにも属しない文字は、ぜんぶまとめて
   <code class="literal">Common</code> で表します。現在サポートするスクリプトは次のとおりです。
  </p>
  <table class="doctable table">
   <caption><strong>サポートするスクリプト</strong></caption>
   
    <tbody class="tbody">
     <tr>
      <td><code class="literal">Arabic</code></td>
      <td><code class="literal">Armenian</code></td>
      <td><code class="literal">Avestan</code></td>
      <td><code class="literal">Balinese</code></td>
      <td><code class="literal">Bamum</code></td>
     </tr>

     <tr>
      <td><code class="literal">Batak</code></td>
      <td><code class="literal">Bengali</code></td>
      <td><code class="literal">Bopomofo</code></td>
      <td><code class="literal">Brahmi</code></td>
      <td><code class="literal">Braille</code></td>
     </tr>

     <tr>
      <td><code class="literal">Buginese</code></td>
      <td><code class="literal">Buhid</code></td>
      <td><code class="literal">Canadian_Aboriginal</code></td>
      <td><code class="literal">Carian</code></td>
      <td><code class="literal">Chakma</code></td>
     </tr>

     <tr>
      <td><code class="literal">Cham</code></td>
      <td><code class="literal">Cherokee</code></td>
      <td><code class="literal">Common</code></td>
      <td><code class="literal">Coptic</code></td>
      <td><code class="literal">Cuneiform</code></td>
     </tr>

     <tr>
      <td><code class="literal">Cypriot</code></td>
      <td><code class="literal">Cyrillic</code></td>
      <td><code class="literal">Deseret</code></td>
      <td><code class="literal">Devanagari</code></td>
      <td><code class="literal">Egyptian_Hieroglyphs</code></td>
     </tr>

     <tr>
      <td><code class="literal">Ethiopic</code></td>
      <td><code class="literal">Georgian</code></td>
      <td><code class="literal">Glagolitic</code></td>
      <td><code class="literal">Gothic</code></td>
      <td><code class="literal">Greek</code></td>
     </tr>

     <tr>
      <td><code class="literal">Gujarati</code></td>
      <td><code class="literal">Gurmukhi</code></td>
      <td><code class="literal">Han</code></td>
      <td><code class="literal">Hangul</code></td>
      <td><code class="literal">Hanunoo</code></td>
     </tr>

     <tr>
      <td><code class="literal">Hebrew</code></td>
      <td><code class="literal">Hiragana</code></td>
      <td><code class="literal">Imperial_Aramaic</code></td>
      <td><code class="literal">Inherited</code></td>
      <td><code class="literal">Inscriptional_Pahlavi</code></td>
     </tr>

     <tr>
      <td><code class="literal">Inscriptional_Parthian</code></td>
      <td><code class="literal">Javanese</code></td>
      <td><code class="literal">Kaithi</code></td>
      <td><code class="literal">Kannada</code></td>
      <td><code class="literal">Katakana</code></td>
     </tr>

     <tr>
      <td><code class="literal">Kayah_Li</code></td>
      <td><code class="literal">Kharoshthi</code></td>
      <td><code class="literal">Khmer</code></td>
      <td><code class="literal">Lao</code></td>
      <td><code class="literal">Latin</code></td>
     </tr>

     <tr>
      <td><code class="literal">Lepcha</code></td>
      <td><code class="literal">Limbu</code></td>
      <td><code class="literal">Linear_B</code></td>
      <td><code class="literal">Lisu</code></td>
      <td><code class="literal">Lycian</code></td>
     </tr>

     <tr>
      <td><code class="literal">Lydian</code></td>
      <td><code class="literal">Malayalam</code></td>
      <td><code class="literal">Mandaic</code></td>
      <td><code class="literal">Meetei_Mayek</code></td>
      <td><code class="literal">Meroitic_Cursive</code></td>
     </tr>

     <tr>
      <td><code class="literal">Meroitic_Hieroglyphs</code></td>
      <td><code class="literal">Miao</code></td>
      <td><code class="literal">Mongolian</code></td>
      <td><code class="literal">Myanmar</code></td>
      <td><code class="literal">New_Tai_Lue</code></td>
     </tr>

     <tr>
      <td><code class="literal">Nko</code></td>
      <td><code class="literal">Ogham</code></td>
      <td><code class="literal">Old_Italic</code></td>
      <td><code class="literal">Old_Persian</code></td>
      <td><code class="literal">Old_South_Arabian</code></td>
     </tr>

     <tr>
      <td><code class="literal">Old_Turkic</code></td>
      <td><code class="literal">Ol_Chiki</code></td>
      <td><code class="literal">Oriya</code></td>
      <td><code class="literal">Osmanya</code></td>
      <td><code class="literal">Phags_Pa</code></td>
     </tr>

     <tr>
      <td><code class="literal">Phoenician</code></td>
      <td><code class="literal">Rejang</code></td>
      <td><code class="literal">Runic</code></td>
      <td><code class="literal">Samaritan</code></td>
      <td><code class="literal">Saurashtra</code></td>
     </tr>

     <tr>
      <td><code class="literal">Sharada</code></td>
      <td><code class="literal">Shavian</code></td>
      <td><code class="literal">Sinhala</code></td>
      <td><code class="literal">Sora_Sompeng</code></td>
      <td><code class="literal">Sundanese</code></td>
     </tr>

     <tr>
      <td><code class="literal">Syloti_Nagri</code></td>
      <td><code class="literal">Syriac</code></td>
      <td><code class="literal">Tagalog</code></td>
      <td><code class="literal">Tagbanwa</code></td>
      <td><code class="literal">Tai_Le</code></td>
     </tr>

     <tr>
      <td><code class="literal">Tai_Tham</code></td>
      <td><code class="literal">Tai_Viet</code></td>
      <td><code class="literal">Takri</code></td>
      <td><code class="literal">Tamil</code></td>
      <td><code class="literal">Telugu</code></td>
     </tr>

     <tr>
      <td><code class="literal">Thaana</code></td>
      <td><code class="literal">Thai</code></td>
      <td><code class="literal">Tibetan</code></td>
      <td><code class="literal">Tifinagh</code></td>
      <td><code class="literal">Ugaritic</code></td>
     </tr>

     <tr>
      <td><code class="literal">Vai</code></td>
      <td><code class="literal">Yi</code></td>
      <td class="empty">&nbsp;</td>
      <td class="empty">&nbsp;</td>
      <td class="empty">&nbsp;</td>
     </tr>

    </tbody>
   
  </table>

  <p class="para">
   <code class="literal">\X</code> は、Unicode 拡張書記素クラスタにマッチします。
   拡張書記素クラスタとは、ひとつあるいは複数の Unicode 文字の組み合わせで単一のグリフを構成するものです。
   事実上、これは Unicode 版の <code class="literal">.</code> だと考えてかまいません。
   その文字をレンダリングするために実際に何文字が使われているかは考えずに、ひとつの合成文字に対応します。
  </p>
  <p class="para">
   8.32 より古いバージョンの PCRE (これは、組み込みの PCRE ライブラリを使っている場合には PHP 5.4.14 より前のバージョンにあたります) では、
   <code class="literal">\X</code> は <code class="literal">(?&gt;\PM\pM*)</code> と等価です。
   つまり、記号 (mark) プロパティの付いていない文字と、その後に続く 0 以上の
   記号プロパティ付きの文字にマッチし、その並びをアトミック (atomic) な
   まとまりとして取り扱います。記号プロパティ付きの文字とは、アクセント記号などの
   直前の文字に対して影響するようなもののことです。
  </p>
     <p class="para">
      Unicode プロパティを使った文字列マッチングは速くありません。PCRE は
      15,000 以上のデータからなるデータ構造を検索する必要が有るためです。
      そのため、PCRE では、<code class="literal">\d</code> や <code class="literal">\w</code> といった
      以前から有るエスケープシーケンスは Unicode プロパティを使用しないように
      なっています。
     </p>
    </div><?php manual_footer($setup); ?>