2012-06-19 20 views
5

可能性の重複にマッチング:
PHP Warning: mb_ereg_match(): mbregex compile err: premature end of char-class正規表現:UTS18標準

Unicodeの共通ロケールデータリポジトリ(CLDR)は、言語間の関係に関する豊富な情報を持っていますと文字。たとえば、misc.exemplarCharactersグラフを見ると、特定の言語で使用されている文字を特定できます。これらのチャートの生データはXMLファイルとして保存され、標本文字はUnicode Regular Expressions標準UTS18に従って正規表現として保存されます。私は、XMLデータを解析し、これらの正規表現の文字列を隔離するためにPHPとSimpleXMLをを使用してい

1. [a à b c ç d e é è f g h i í ï j k l ŀ m n o ó ò p q r s t u ú ü v w x y z] 
2. [অ আ ই ঈ উ ঊ ঋ এ ঐ ও ঔ ং \u0981 ঃ ক খ গ ঘ ঙ চ ছ জ ঝ ঞ ট ঠ ড {ড\u09BC}ড় ঢ {ঢ\u09BC}ঢ় ণ ত থ দ ধ ন প ফ ব ভ ম য {য\u09BC} ৰ ল ৱ শ ষ স হ া ি ী \u09C1 \u09C2 \u09C3 ে ৈ ো ৌ \u09CD] 
3. [a á b ɓ c d ɗ e é ɛ {ɛ\u0301} f g i í j k l m n {ny} ŋ o ó ɔ {ɔ\u0301} p r s t u ú ū w y] 

はここUTS18正規表現式がどのように見えるかのいくつかの例です。さて、これらの正規表現に個々のマルチバイト文字をマッチさせたいと思います。私は現在、次の警告(正規表現に依存する)の一つ以上を生み出すmb_ereg_match機能を、使用しています:

mbregex compile err: premature end of char-class in ... 
mbregex compile err: empty range in char class in ... 
mbregex compile err: empty char-class in ... 

すべてのアイデアは、これが動作しない理由として?

+0

Do Uはmb_internal_encodingとmb_regex_encodingを設定しますか? Plsは、Uがmb_ereg_matchを使用するUrコードを表示します。 – Sergey

+0

「可能な重複」[mb_ereg_match():mbregexコンパイルエラー:char-classの早期終了](http://stackoverflow.com/questions/11094518/php-warning- mb-ereg-match-mbregex-compile-err-end-of-char-class)は削除された投稿であるため、この質問を再開しました。 –

答えて

2

セルゲイによって示唆されるように、Iはmb_ereg_match()関数を呼び出す前に次の行を追加:

mb_internal_encoding('UTF-8'); 
mb_regex_encoding('UTF-8'); 

この添加は、上​​記の警告のうちの2つを排除しました。私はCLDRのXMLファイルの一握りは、実際には空の正規表現文字列が含まれていないことを発見し、いくつかの追加のデバッグ後

mbregex compile err: empty char-class in ... 

:私は、唯一の次の警告を残しました。例えば、kn.xmlに我々は次の行を持っている:

<exemplarCharacters type="auxiliary">[]</exemplarCharacters> 

を予想される動作は、単に完全にラインを除外するだろうと私は(主にCLDRを通してケースである)、これらの線が誤っていると信じています。

このように、私は空の正規表現文字列を投げ捨てるだけでこの最後のエラーを取り除くことができました。

これは他の人に役立つことを願っています!