Domanda

http://translate.google.com/#en|hi|Bangalore per ottenere il Hindi per Bangalore e ??????.

Ma quando ho incollato in vim v'è una pausa prima che l'ultimo carattere ?.
Sto usando preg_replace con il modello di espressione regolare / [^ \ p {} L \ p {Nd} \ p {Mn} _] / u per le parole corrispondenti. Ma questo sta trattando l'ultimo carattere come parola separata.

Questa è la mia stringa di input ?????????, ?????? e mi aspetto l'uscita di essere ????????? ?????? dopo la preg_replace

$cleanedString = preg_replace('/[^\p{L}\p{Nd}\p{Mn}_]/u', ' ', $name);

Ma l'uscita sto ottenendo è ????????? ???? ?. Che cosa sto facendo male qui? Credo che il problema inizia da come vim gestito il testo ho incollato.

È stato utile?

Soluzione

Prova questo regex "/[^\p{L}\p{Nd}\p{Mn}\p{Mc}_]/u"

Il simbolo O in लौ prende spazio orizzontale in contrasto con il ae in मै. Il \p{Mn} classe unicode corrisponde marchi solo senza spaziatura. Utilizzare \p{Mc} per abbinare spaziatura-segni. È possibile utilizzare \p{M} per abbinare tutti-i marchi che conciliano: "/[^\p{L}\p{Nd}\p{M}_]/u"

regular-expressions.info/unicode

  

\p{M} o \p{Mark}: un personaggio destinati ad essere combinato con un altro carattere (per esempio accenti, dieresi, scatole di chiusura, ecc.)

.      
      
  • \p{Mn} o \p{Non_Spacing_Mark}: un personaggio destinati ad essere combinato con un altro personaggio senza occupare spazio aggiuntivo (ad esempio gli accenti, dieresi, ecc.)
  • .   
  • \p{Mc} o \p{Spacing_Combining_Mark}: un personaggio destinati ad essere combinato con un altro personaggio che occupa spazio aggiuntivo (segni vocalici in molte lingue orientali)
  • .   
  • \p{Me} o \p{Enclosing_Mark}: un personaggio che racchiude il carattere è si combina con (cerchio, quadrato, keycap, etc.).
  •   
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top