2012-06-19 22 views
5

Duplicar posibles:
PHP Warning: mb_ereg_match(): mbregex compile err: premature end of char-classexpresiones regulares en PHP: Coincidencia con el UTS18 estándar

la configuración regional de depósito de datos Unicode Común (CLDR) tiene una gran cantidad de información con respecto a la relación entre las lenguas y personajes Por ejemplo, puede determinar qué caracteres se utilizan en un idioma particular consultando el cuadro misc.exemplarCharacters. Los datos brutos para estos gráficos se almacenan como archivos XML y los caracteres ejemplares se almacenan como expresiones regulares de acuerdo con el estándar UTS18 Expresiones regulares de Unicode.

He aquí algunos ejemplos de lo que expresiones UTS18 expresiones regulares se ven como:

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] 

estoy usando PHP y SimpleXML para analizar los datos XML y aislar estas cadenas de expresiones regulares. Ahora, me gustaría hacer coincidir los caracteres individuales de varios bytes con estas expresiones regulares. Actualmente estoy usando la función mb_ereg_match, que produce una o más de las siguientes advertencias (en función de la expresión regular):

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

¿Alguna idea de por qué esto no está funcionando?

+0

¿Configura U mb_internal_encoding y mb_regex_encoding? Pls muestra el código de Ur donde U usa mb_ereg_match – Sergey

+0

El "posible duplicado" [PHP Advertencia: mb_ereg_match(): mbregex compile err: fin prematuro de la clase de char] (http://stackoverflow.com/questions/11094518/php-warning- mb-ereg-match-mbregex-compile-err-premature-end-of-char-class) es una publicación eliminada, por lo tanto, volvió a abrir esta pregunta. –

Respuesta

2

Como sugerido por Sergey, añadí las siguientes líneas antes de llamar a la función mb_ereg_match():

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

Esta adición eliminado dos de las advertencias enumeradas anteriormente. Sólo quedó la siguiente advertencia:

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

Después de una cierta depuración adicional, descubrí que un puñado de los archivos XML CLDR contienen de hecho vacíos cadenas de expresiones regulares. Por ejemplo, en kn.xml tenemos la siguiente línea:

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

Creo que estas líneas son erróneos, ya que el comportamiento esperado sería simplemente dejar la línea por completo (que es sobre todo el caso en todo el CLDR).

Por lo tanto, pude eliminar este último error simplemente descartando cadenas de expresiones regulares vacías.

Espero que esto ayude a alguien más!

Cuestiones relacionadas