Я использовал 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 обработал вставленный мной текст.
Попробуйте это регулярное выражение "/[^\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}
: символ, который окружает символ, сочетается с (круг, квадрат, колпачок и т. д.).