我有一个正则表达式来获取名称的缩写,如下所示:
/\b\p{L}\./gu
它可以与英语和其他语言一起正常工作,直到出现字素和组合字符为止。
喜欢
क
(印地语和
)
ಕ
在卡纳达语
被匹配
但是
के
,这是北印度文,
ಕೆ
的卡纳达语与此正则表达式不匹配。
我正试图从摩根大通(J.P. Morgan)等名字取名字的缩写。
任何帮助将不胜感激。
答案 0 :(得分:1)
您需要使用\p{M}*
在基字母后面匹配音符号:
'~\b(?<!\p{M})\p{L}\p{M}*\.~u'
模式匹配
\b
-单词边界(?<!\p{M})
-当前位置之前的字符不能是变音符(没有变音符,一个单词内可以出现匹配项)\p{L}
-任何基本的Unicode字母\p{M}*
-0 +变音符号\.
-点。请参见PHP demo online:
$s = "क. ಕ. के. ಕೆ. ";
echo preg_replace('~\b(?<!\p{M})\p{L}\p{M}*+\.~u', '<pre>$0</pre>', $s);
// => <pre>क.</pre> <pre>ಕ.</pre> <pre>के.</pre> <pre>ಕೆ.</pre>