匹配姓名首字母的正则表达式 - PCRE

regular expression to match name initials - PCRE

我有一个正则表达式来获取姓名的首字母,如下所示:

/\b\p{L}\./gu

它适用于英语和其他语言,直到出现字形和组合字符。 喜欢
(印地语)和
卡纳达语
正在匹配
但是,
के 这个是印地语,
ಕೆ卡纳达语中的这个
与这个正则表达式不匹配。
我正在尝试从 J.P.Morgan 等
等名称中获取首字母 任何帮助将不胜感激。

您需要使用 \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>[=11=]</pre>', $s); 
// => <pre>क.</pre> <pre>ಕ.</pre> <pre>के.</pre> <pre>ಕೆ.</pre>