ホームページ >バックエンド開発 >PHPチュートリアル >完璧な PHP 正規表現マッチング Chinese_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 つの例を示します: www.2cto.com
(1) ANSI プログラミング環境の場合:
$strtest = "yyg 漢字 yyg";
$pregstr = "/([".chr(0xb0)."-".chr(0xf7)."][".chr(0xa1)."-".chr(0xfe)."])+/i";
if(preg_match($pregstr,$strtest,$matchArray)){
エコー $matchArray[0];
}
//出力: 漢字
(2) Utf-8 プログラミング環境の場合:
$strtest = "yyg 漢字 yyg";
$pregstr = "/[x{4e00}-x{9fa5}]+/u";
if(preg_match($pregstr,$strtest,$matchArray)){
エコー $matchArray[0];
}
//出力: 漢字
作者: zdrjlamp