中国語の一致に最適な PHP 正規表現
1. 中国語の一般的な一致にはメタ文字を使用します (/.*?/s)。ANSI (gb2312) および utf- のプログラム コードに適用できる中国語のセクションと一致します。 8つの環境すべてを実現できます。ただし、w は中国語に匹敵するものではないことを思い出してください。以前、「正規表現をマスターする」(人民郵政出版社、沙金編)という本で、w を使用して漢字を照合できると読んだことがありますが、PHP ではそれができないと訂正したいと思います。 「/./」、「/[^d]/」、「/[^a]/」を使用して中国語の文字と一致させることができます。
2. 中国語を正確に照合する場合、つまり純粋な中国語の文字を照合する場合、または中国語の文字と全角の句読点を照合する場合は、異なるエンコード環境に応じて異なる方法を使用する必要があります。以下は、一般的に使用される 2 つのエンコーディング (gb2312、utf-8) の紹介です:
ANSI (gb2312) 環境では、[chr(0xnn)-chr(0xmm)] メソッドを使用して照合できます。たとえば、このメソッドはオンライン記事「/[」.chr(0xb0) で提供されています。 ) ."-".chr(0xf7)."]+/"、これは使用できますが、この式は漢字、句読点、日本語のひらがなを含む gb2312 エンコード テーブル内のすべての文字に一致します。 、何なのかわからない記号がいくつかあります。エンコード表から、漢字のエンコード範囲は 0xb0a1 ~ 0xf7fe で、gb2312 は 2 バイトでエンコードされ、各バイトの最上位ビットは 1 であることがわかります。したがって、これを使用して、中国語の文字に単純に一致する正規表現を記述することができます:
"/([".chr(0xb0)."-".chr(0xf7)."][".chr(0xa1)."-".chr(0xfe)."])/" 、この式公式は漢字と一致することができ、量的な関係を簡単に拡張できます。
そして、類推して、中国語ではなく全角の句読点に一致させたい場合は、次のように書くことができます:
"/([".chr(0xa1)."-".chr(0xa3)."][".chr(0xa1)."-".chr(0xff)."])/" は一致しますエンコード範囲 0xa1a1 ~ 0xa3ff のシンボル。他も同様です。
3. 以下では、utf-8 環境での中国語のマッチングを紹介します。上記と同様に、Unicode エンコード テーブルを使用して中国語の一致を判断することもできます。エンコード表からわかるように、中国語のエンコード範囲は 0x4e00-0x9fa5 であるため、正規表現は次のように記述できます:
"/[x{4e00}-x{9fa5}]/u"、x{nnnn} は文字の 16 進形式を表します。詳細については、PHP マニュアルを確認してください。モード修飾子 u に特に注意してください。PHP マニュアルには次のように記載されています:
u (PCRE_UTF8) この修飾子は、Perl と互換性のない PCRE の追加機能を有効にします。パターン文字列は UTF-8 として扱われます。この修飾子は、Unix では PHP 4.1.0 以降、win32 では PHP 4.2.3 以降で使用できます。 PHP 4.3.5 以降、パターンの UTF-8 の有効性がチェックされます。これはまさに正しい一致に必要なものです。実際、UTF-8 環境で文字列と一致させるためにメタキャラクターを使用する場合は、修飾子 u を追加するのが最善であることも思い出してください。これは単なる経験です。
ここに 2 つの例があります:
(1) ANSI プログラミング環境の場合:
$strtest = “yyg 漢字 yyg”;
$pregstr = "/([".chr(0xb0)."-".chr(0xf7)."][".chr(0xa1)."-".chr(0xfe)."])+/私";
if(preg_match($pregstr,$strtest,$matchArray)){
echo $matchArray[0];
}
//出力: 漢字
(2) Utf-8 プログラミング環境の場合:
$strtest = “yyg 漢字 yyg”;
$pregstr = "/[x{4e00}-x{9fa5}]+/u";
if(preg_match($pregstr,$strtest,$matchArray)){