php + vim - बंगलौर (Бангалор) имеет перерыв перед последним символом र

Я использовал http://translate.google.com/#en|hi|Bangalore , чтобы получить хинди для Бангалора и Э.

Но когда я вставил его в vim есть разрыв перед последним символом र.
Я использую preg_replace с шаблоном регулярных выражений / [^ \ p {L} \ p {Nd} \ p {Mn} _] / u для сопоставления слов. Но это трактует последний символ как отдельное слово.

Это моя входная строка मैनेजमेंट, बंगलौर, и я ожидаю, что результат будет मैनेजमेंट बंगलौर после preg_replace

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

Но вывод, который я получаю, это मैनेजमेंट बंगल र. Что я здесь не так делаю? Я предполагаю, что проблема начинается с того, как vim обработал вставленный мной текст.

1
задан Jithin 30 August 2010 в 06:05
поделиться

1 ответ

Попробуйте это регулярное выражение "/[^\p{L}\p{Nd}\p{Mn}\p{Mc}_]/u"

Символ O в लौ занимает дополнительное пространство по горизонтали, в отличие от ae в मै. Класс Unicode \p{Mn} соответствует только знакам без пробелов. Используйте \p{Mc} для сопоставления меток пробелов. Вы можете использовать \p{M} для сопоставления всех меток объединения: "/[^\p{L}\p{Nd}\p{M}_]/u"

Из regular-expressions.info/unicode

\p{M} или \p{Mark}: символ, предназначенный для объединения с другим символом (например, ударение, умлауты). , закрывающие коробки и др.).

  • \p{Mn} или \p{Non_Spacing_Mark}: символ, предназначенный для объединения с другим символом, не занимая лишнего места (например, ударения, умлауты и т. д.).
  • \p{Mc} или \p{Spacing_Combining_Mark}: символ, предназначенный для объединения с другим символом, занимающим дополнительное место (знаки гласных во многих восточных языках).
  • \p{Me} или \p{Enclosing_Mark}: символ, который окружает символ, сочетается с (круг, квадрат, колпачок и т. д.).
2
ответ дан 2 September 2019 в 21:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: