2012-06-19 9 views
5

Powiel możliwe:
PHP Warning: mb_ereg_match(): mbregex compile err: premature end of char-classWyrażenia regularne w PHP: Dopasowane do UTS18 standardowej

Wspólna Unicode Locale danych repozytorium (CLDR) zawiera wiele informacji dotyczących relacji między językach i postacie. Na przykład możesz określić, które znaki są używane w danym języku, patrząc na tabelę misc.exemplarCharacters. Surowe dane dla tych wykresów są przechowywane jako pliki XML, a przykładowe znaki są przechowywane jako wyrażenia regularne zgodnie ze standardem Unicode Standard Expressions UTS18.

Oto kilka przykładów tego, co wyrażenia UTS18 regex wyglądać następująco:

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] 

używam PHP i SimpleXML do analizowania danych XML i wyizolować te regex sznurki. Teraz chciałbym dopasować poszczególne znaki wielobajtowe do tych wyrażeń regularnych. Obecnie używam funkcji mb_ereg_match, co daje jedną lub więcej z następujących ostrzeżeń (w zależności od regex):

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 ... 

pomysłów, dlaczego to nie działa?

+0

Czy ustawiono mb_internal_encoding i mb_regex_encoding? Pls pokazuje kod Ur, gdzie U używa mb_ereg_match – Sergey

+0

"Możliwy duplikat" [Ostrzeżenie PHP: mb_ereg_match(): kompilacja mbregex: przedwczesny koniec klasy znaków] (http://stackoverflow.com/questions/11094518/php-warning- mb-ereg-match-mbregex-compile-err-przedwczesny-koniec-klasy-klasy) jest usuniętym wpisem, więc ponownie otworzyło to pytanie. –

Odpowiedz

2

Jak sugeruje Sergey I dodaje się następujące linie przed wywołaniem funkcji mb_ereg_match():

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

Dodanie wyeliminować dwa ostrzeżeń wymienionych powyżej. Zostałem tylko z następującym ostrzeżeniem:

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

Po jakimś dodatkowym debugowania, odkryłem, że garstka plików XML CLDR zrobić w rzeczywistości zawierać pustych regularne ciągi ekspresyjne. Na przykład, w kn.xml mamy następujący wiersz:

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

Wierzę, że te linie są błędne, gdyż oczekiwane zachowanie byłoby po prostu opuścić linię się całkowicie (co jest głównie sprawa całym projekcie CLDR konsorcjum).

W ten sposób udało mi się wyeliminować ten ostatni błąd, po prostu wyrzucając puste ciągi regex.

Mam nadzieję, że to pomoże komuś innemu!

Powiązane problemy