2012-03-29 1 views

答えて

6

サイトの説明はかなり良好である:

\ Xは、単一のコードポイントまたは結合マークを使用して、複数のコードポイントとして符号化するかどうかを、単一のUnicode書記素と一致します。グラフェンは、「キャラクター」という日常的な概念に最もよく似ています。 \ Xだから

など、U + 00E0、©としてエンコードされたA、U + 0300 U + 0061としてエンコードà一致し、それはUnicode対応になり事は、それがいくつかのコードポイントを一致させることができるということですそれらがひとつの目に見える「もの」(書記素)に結合するとき。

詳細についてはWikipedia's page on Combining Charactersを参照してください。たとえば、上記のU + 0300コードポイントがリストされています。 Perl regex manualから

2

これは、Unicode 拡張書記素クラスタと一致します。

\Xはまったく一致します 普通の(ユニコードでないプログラマーの)使用は、 の単一文字と考えられます。一例として、矢印のようなある種の 分音記号を持つGを考えてみましょう。 ユニコードにはこのような単一の文字はありませんが、Gの後にUnicode "COMBINING UPWARDS ARROW BELOW"を使用して構成でき、 のようにUnicode対応のソフトウェアが1文字であるかのように表示されます。

ニーモニック:拡張されたUnicode文字。

PCRE man pagesから(2012):

PCREは\ X Unicodeは、 "拡張書記素クラスタ" と呼ぶものと一致するように変更はPerl、より\ Xの簡単なバージョンを実装しています。 これは拡張Unicodeシーケンスより複雑です。これは のPCREと一致します。

[...]

\ X拡張Unicodeシーケンス

[...]の\ Xエスケープは、拡張を構成するUnicode文字の任意の数と一致する

Unicodeシーケンス。Xであること

(?>\PM\pM*) 

と等価である\、それは が「マーク」プロパティを持つゼロ以上の文字に続いて、「マーク」プロパティなしの文字にマッチし、かつ原子団(AS 扱い配列下記参照)。文字「 」の文字は、通常、先行文字の に影響するアクセントです。どちらも256未満のコードポイントを持っていないので、 では、8ビットの非UTF-8モード\ Xは任意の1文字と一致します。

最近のバージョンのPerlでは\ Xが何であるかに一致するように\ Xを変更しています。 Unicodeは複雑な定義が である「拡張書記素クラスタ」を呼び出します。 PCRE man pages

以降のバージョン(2015):

拡張書記素クラスタ

\Xエスケープは、 "拡張書記素クラスタ" を形成するUnicode文字の任意の数と一致し、シーケンスを扱います原子番号 グループ(以下を参照)。リリース8.31までを含む、PCREはear-リール、

それは「マーク」プロパティなしの文字にマッチした、ある
(?>\PM\pM*) 

に相当したシンプルな定義は、 がゼロ以上の文字が続く を一致しました「マーク」プロパティ "mark"プロパティを持つ文字は通常、前の文字に影響を与えるアクセント記号ではなく、アクセント記号で囲まれています( )。

この単純な定義では、各文字に 書記素遮断性を付与し、拡張書記素 クラスタの境界を定義するためにこれらの プロパティを使用するルールを作成することにより、複合文字のより compli- cated種類が含まれるようにUnicodeで拡張されました。 PCREのリリースが8.31より遅い場合、\Xは のいずれかと一致します。

\Xは常に少なくとも1文字に一致します。

  1. エンドを対象文字列の末尾に:それは が がクラスタを終了するため、次の規則に従って追加の文字を追加するかどうかを決定します。

  2. CRとLFの間で終了しないでください。それ以外の場合は制御文字の後で終了します。

  3. ハングル(韓国語のスクリプト)の音節シーケンスを改行しないでください。ハングル文字には、L、V、T、LV、LVTの5種類があります。 L 文字の後ろに、L、V、LV、またはLVT文字を続けることができます。 LVまたは V文字の後にはVまたはT文字を続けることができます。 LVTまたはT 文字は、T文字の後に付けることができます。

  4. 文字またはスペース記号を拡張する前に終了しないでください。 "mark"プロパティを持つ文字は、常に "extend" 書記素分割プロパティを持ちます。

  5. 文字の前に文字を挿入しないでください。

  6. それ以外の場合は、クラスタを終了します。

関連する問題