ホームページ バックエンド開発 PHPチュートリアル 完美匹配中文的Php正则表达式

完美匹配中文的Php正则表达式

Jun 13, 2016 am 10:36 AM
quot

完善匹配中文的Php正则表达式

1. 笼统的使用元字符匹配中文,/.*?/s,可匹配一段中文,这在ANSI(gb2312)和utf-8环境的程序代码都可以实现。但提醒一下,\w不能匹配中文。曾在一本《精通正则表达式》(人民邮电出版社,沙金编著)书上看到可以使用\w匹配中文,这里纠正一下用php不行。可以使用”/./”,” /[^\d]/”,”/[^a]/”,匹配中文字符。
2. 如果要精准匹配中文,即匹配纯中文字符,或匹配中文字符加上全角标点,则需要根据不同编码环境使用不同方法。下面以两种常用的编码(gb2312,utf-8)进行介绍:
在 ANSI(gb2312)环境下,可使用[chr(0xnn)-chr(0xmm)]的方式匹配,如在一篇网文上就提供这样的方法,”/[".chr(0xb0)."-".chr(0xf7)."]+/”,这是可以使用的,但这太过笼统,这个表达式是匹配全部的gb2312编码表的字符,既包括汉字、标点、日文平假名等,还有一些不知是什么符号的。而从编码表可以看出汉字的编码范围是0xb0a1-0xf7fe,并且gb2312 是用两个字节进行编码的,每个字节最高位都是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}表示字符的十六进制形式,更多信息请自己查看php手册。要特别注意的是模式修正符u ,php手册里这样说:u(PCRE_UTF8) 此修正符启用了一个 PCRE 中与 Perl 不兼容的额外功能。模式字符串被当成 UTF-8。本修正符在 Unix 下自 PHP 4.1.0 起可用,在 win32 下自 PHP 4.2.3 起可用。自 PHP 4.3.5 起开始检查模式的 UTF-8 合法性。这正是正确匹配所必须的。其实也想提醒一下,是utf-8环境使用元字符匹配字符串最好加上修正符u,这只是经验。
下面给两个例子:
(1) ANSI编程环境下:
$strtest = “yyg中文字符yyg”;
$pregstr = "/([".chr(0xb0)."-".chr(0xf7)."][".chr(0xa1)."-".chr(0xfe)."])+/i";
if(preg_match($pregstr,$strtest,$matchArray)){
echo $matchArray[0];
}
//output:中文字符
(2) Utf-8编程环境下:
$strtest = “yyg中文字符yyg”;
$pregstr = "/[\x{4e00}-\x{9fa5}]+/u";
if(preg_match($pregstr,$strtest,$matchArray)){
echo $matchArray[0];
}
//output:中文字符
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Laravelでフラッシュセッションデータを使用します Laravelでフラッシュセッションデータを使用します Mar 12, 2025 pm 05:08 PM

Laravelは、直感的なフラッシュメソッドを使用して、一時的なセッションデータの処理を簡素化します。これは、アプリケーション内に簡単なメッセージ、アラート、または通知を表示するのに最適です。 データは、デフォルトで次の要求のためにのみ持続します。 $リクエスト -

PHPのカール:REST APIでPHPカール拡張機能を使用する方法 PHPのカール:REST APIでPHPカール拡張機能を使用する方法 Mar 14, 2025 am 11:42 AM

PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

Laravelテストでの簡略化されたHTTP応答のモッキング Laravelテストでの簡略化されたHTTP応答のモッキング Mar 12, 2025 pm 05:09 PM

Laravelは簡潔なHTTP応答シミュレーション構文を提供し、HTTP相互作用テストを簡素化します。このアプローチは、テストシミュレーションをより直感的にしながら、コード冗長性を大幅に削減します。 基本的な実装は、さまざまな応答タイプのショートカットを提供します。 Illuminate \ support \ facades \ httpを使用します。 http :: fake([[ 'google.com' => 'hello world'、 'github.com' => ['foo' => 'bar']、 'forge.laravel.com' =>

Codecanyonで12の最高のPHPチャットスクリプト Codecanyonで12の最高のPHPチャットスクリプト Mar 13, 2025 pm 12:08 PM

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

PHPにおける後期静的結合の概念を説明します。 PHPにおける後期静的結合の概念を説明します。 Mar 21, 2025 pm 01:33 PM

記事では、PHP 5.3で導入されたPHPの後期静的結合(LSB)について説明し、より柔軟な継承を求める静的メソッドコールのランタイム解像度を可能にします。 LSBの実用的なアプリケーションと潜在的なパフォーマ

フレームワークのカスタマイズ/拡張:カスタム機能を追加する方法。 フレームワークのカスタマイズ/拡張:カスタム機能を追加する方法。 Mar 28, 2025 pm 05:12 PM

この記事では、フレームワークにカスタム機能を追加し、アーキテクチャの理解、拡張ポイントの識別、統合とデバッグのベストプラクティスに焦点を当てています。

フレームワークセキュリティ機能:脆弱性から保護します。 フレームワークセキュリティ機能:脆弱性から保護します。 Mar 28, 2025 pm 05:11 PM

記事では、入力検証、認証、定期的な更新など、脆弱性から保護するためのフレームワークの重要なセキュリティ機能について説明します。

See all articles