PCRE正規表現エンジンを採用しているPHPのドキュメントには、以下の記述が存在します。
\X は、Unicode 拡張書記素クラスタにマッチします。 拡張書記素クラスタとは、ひとつあるいは複数の Unicode 文字の組み合わせで単一のグリフを構成するものです。 事実上、これは Unicode 版の . だと考えてかまいません。 その文字をレンダリングするために実際に何文字が使われているかは考えずに、ひとつの合成文字に対応します。
8.32 より古いバージョンの PCRE (これは、組み込みの PCRE ライブラリを使っている場合には PHP 5.4.14 より前のバージョンにあたります) では、 \X は (?>\PM\pM*) と等価です。 つまり、記号 (mark) プロパティの付いていない文字と、その後に続く 0 以上の 記号プロパティ付きの文字にマッチし、その並びをアトミック (atomic) な まとまりとして取り扱います。記号プロパティ付きの文字とは、アクセント記号などの 直前の文字に対して影響するようなもののことです。
この内容によると、拡張書記素クラスタにマッチするパターンの\X
は、PCRE 8.32以降、(?>\PM\pM*)
ではないパターンであると解釈できます。
つまり、改善されたものと考えられ、(?>\PM\pM*)
は拡張書記素クラスタを表現するパターンとして、厳密には正しくないものと予想されます。
もしそうであるならば、拡張書記素クラスタと厳密に等価な、正しい正規表現パターンは何なのでしょうか?
JavaScriptの正規表現や、任意のUnicode 一般カテゴリプロパティを除外した拡張書記素クラスタのパターンを記述したいので、\X
は利用できません。
なので、\X
を利用せずに、拡張書記素クラスタの正規表現パターンを解答していただけると、ありがたいです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/01/20 17:36
2016/01/21 00:01
2016/01/21 06:42 編集
2016/01/21 07:23
2016/01/21 07:45
2016/01/21 07:58 編集
2016/01/21 09:15
2016/01/21 09:31
2016/01/31 19:14 編集