1

我使用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 如何处理我粘贴的文本开始的。

4

1 回答 1

3

试试这个正则表达式"/[^\p{L}\p{Nd}\p{Mn}\p{Mc}_]/u"

相对于in ,O符号 inलौ占用额外的水平空间。unicode 类仅匹配非间距标记。用于匹配间距标记。您可以使用匹配所有组合标记:aeमै\p{Mn}\p{Mc}\p{M}"/[^\p{L}\p{Nd}\p{M}_]/u"

来自正则表达式.info/unicode

\p{M}or \p{Mark}: 一个要与另一个字符组合的字符(例如重音符号、变音符号、封闭框等)。

  • \p{Mn}or \p{Non_Spacing_Mark}: 一个旨在与另一个字符组合而不占用额外空间的字符(例如重音符号、变音符号等)。
  • \p{Mc}\p{Spacing_Combining_Mark}: 用于与占用额外空间的另一个字符组合的字符(许多东方语言中的元音符号)。
  • \p{Me}or \p{Enclosing_Mark}: 包含字符的字符与(圆形、方形、键帽等)组合。
于 2010-08-30T06:44:10.710 回答