ホームページ >バックエンド開発 >PHPチュートリアル >正規表現を使用して PHP で中国語の実装ノートを抽出する、_PHP チュートリアル

正規表現を使用して PHP で中国語の実装ノートを抽出する、_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:09:21838ブラウズ

正規表現を使用して PHP で中国語の実装ノートを抽出する

最近、上司からデータ重複チェックの小さな演習を依頼されました。これには、中国語フィールドを含むファイルから中国語フィールドを抽出して保存し、PHP を使用して開発することが含まれます。真ん中は、PHP の正規表現の中国語のマッチングの問題です。インターネットでいろいろ調べましたが、これも非常にわかりにくく、正確な情報がありませんでした。自分のコードを修正してテストした後、最初に抽出関数を書き留めました。

最初に注意すべきことは、全角文字のエンコーディングの問題です。ここでは、将来、中国語と同じ意味の韓国語や日本語などのエンコーディングの問題も発生する可能性があります。

1.GBK(GB2312/GB18030)

コードをコピーします コードは次のとおりです:

x00-xff GBK 2 バイトエンコード範囲
x20-x7f アスキー
xa1-xff 中国語 gb2312
x80-xff 中国の GBK

2. UTF-8 (ユニコード)
コードをコピーします コードは次のとおりです:

u4e00-u9fa5 (中国語)
x3130-x318F (韓国語
) xAC00-xD7A3 (韓国語)
u0800-u4e00 (日本語)

Notepad++ では、まず通常の書き込みが間違っているかどうかをテストできます。最初の式をテストするために [u4e00-u9fa5]+ を使用しました。+ 記号は複数の

を示します。

一致記号。結果は予想どおりなので、この通常のルールをスクリプトで使用できますか?

テストしてみましょう。preg_match_all('/[u4e00-u9fa5]+/', $subject,$matches) 呼び出しを使用すると、次の結果が表示されます: Compilation failed: PCRE doesn't support L, l, N{ name} 、U、またはオフセット 2 の u。 。 。 。とても大きくないですか? ?その理由は何でしょうか?

多くの情報を調べた結果、u (PCRE_UTF8) は上記の PCRE であることがわかりました。これは Perl 互換の正規表現ライブラリを含む Perl ライブラリです。この修飾子は、Perl と互換性のない PCRE の追加機能を有効にします。パターン文字列は UTF-8 として扱われます。この修飾子は、Unix では PHP 4.1.0 以降、win32 では PHP 4.2.3 以降で使用できます。 PHP 正規表現には、16 進数データを表現するさまざまな方法もあります。PHP では、16 進数データを表すために x が使用されます。次に、コードを最適化すると、検出関数は次のようになります:

コードをコピーします コードは次のとおりです:

class storeDataAdapter extends Store{
private $dsData; /**
* データ変換関数。preg_match_all を呼び出して、$pattern の規則性に基づいて数値マッチングを実行し、返された結果を配列の形式で $matches に保存します。
* $matches[0] にはパターン全体に一致するテキストが含まれ、$matches[1] には最初にキャプチャされた括弧内のサブパターンに一致するテキストが含まれます。以下同様です
* @Store::data_convert() を参照
                     */
パブリック関数 data_convert($pattern,$subject) {
$matches=array(); If (preg_match_all($pattern, $subject,$matches)){
$matches[0]; を返します。                                                                                                                                                                                                                                            null を返す;                                                                                                                                                                                 }



呼び出すと、次のようになります:




コードをコピーします
コードは次のとおりです:

$store=新しいstoreDataAdapter($txtContent); $match=配列(); $dsName=$store->data_convert(‘/[x7f-xff]+/',$txtContent); foreach ($dsName として $val){

echo $val."
"; }

入力ファイルは次のとおりです:

、中国語を抽出した後の出力ファイルの内容は次のとおりです:

、予想されるニーズに沿ったもの。

www.bkjia.com本当http://www.bkjia.com/PHPjc/945718.html技術記事正規表現を使用して PHP で中国語の実装ノートを抽出すると、最近上司からデータ重複チェックの小さな演習を依頼されました。これには、中国語フィールドを含むファイルから中国語フィールドを抽出する作業が含まれます...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。