Frage

Ich benutzen http://translate.google.com/#en|hi|Bangalore bekommen die Hindi für Bangalore und ??????.

Aber wenn ich es in vim geklebt gibt es eine Pause vor dem letzten Zeichen ?.
Ich verwende preg_replace mit dem RegexMuster / [^ \ p {L} \ p {Nd} \ p {Mn} _] / u für passende Worte. Aber dies ist das letzte Zeichen als separates Wort zu behandeln.

Das ist mein Eingabestring ?????????, ?????? und ich erwarte, um die Ausgabe zu sein ????????? ?????? nach dem preg_replace

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

Aber die Ausgabe erhalte ich ist ????????? ???? ?. Was mache ich hier falsch? Ich denke, das Problem beginnt ab, wie vim behandelt der Text, den ich eingefügt.

War es hilfreich?

Lösung

Versuchen Sie, diese Regex "/[^\p{L}\p{Nd}\p{Mn}\p{Mc}_]/u"

Das O Symbol in लौ nimmt zusätzlichen horizontalen Raum in Bezug auf die ae in मै gegenüber. Die Unicode-Klasse \p{Mn} passt nur nicht-Abstandsmarkierungen. Verwenden \p{Mc} Abstandsmarkierungen entsprechen. Sie können \p{M} verwenden, um alle Vereinigungs-Noten entsprechen: "/[^\p{L}\p{Nd}\p{M}_]/u"

regular-expressions.info/unicode

\p{M} oder \p{Mark}: ein Zeichen bestimmt, die mit einem anderen Zeichen kombiniert wird (beispielsweise Akzente, Umlaute umschließenden Boxen, etc.)

.
  • \p{Mn} oder \p{Non_Spacing_Mark}: ein Zeichen bestimmt, die mit einem anderen Zeichen kombiniert werden, ohne zusätzlichen Raum einzunehmen (z.B. Akzente, Umlaute, etc.)
  • .
  • \p{Mc} oder \p{Spacing_Combining_Mark}: ein Charakter soll mit einem anderen Charakter kombiniert werden, die besonders viel Platz in Anspruch nimmt (Vokalzeichen in vielen östlichen Sprachen)
  • .
  • \p{Me} oder \p{Enclosing_Mark}: ein Zeichen, das den Charakter umschließt wird kombiniert mit (Kreis, Quadrat, keycap, etc.).
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top