Php 要匹配名称首字母的正则表达式-PCRE

Php 要匹配名称首字母的正则表达式-PCRE,php,regex,pcre,grapheme,Php,Regex,Pcre,Grapheme,我有一个正则表达式来获取名称的首字母,如下所示: /\b\p{L}\./gu 它可以很好地与英语和其他语言配合使用,直到出现了字形和组合字符。 像 क印地语和 ಕ在卡纳达 正在进行匹配 但是, के这是印地语, ಕೆKannada中的这个与这个正则表达式不匹配。 我正试图从J.P.Morgan等名字中获得首字母缩写。 任何帮助都将不胜感激 您需要使用\p{M}*在基本字母后匹配变音符号: '~\b(?<!\p{M})\p{L}\p{M}*\.~u' “,$s); // => क. ಕ.

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

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

它可以很好地与英语和其他语言配合使用,直到出现了字形和组合字符。 像
印地语和
在卡纳达
正在进行匹配
但是,
के这是印地语,
ಕೆKannada中的这个与这个正则表达式不匹配。
我正试图从J.P.Morgan等名字中获得首字母缩写。

任何帮助都将不胜感激

您需要使用
\p{M}*
在基本字母后匹配变音符号:

'~\b(?<!\p{M})\p{L}\p{M}*\.~u'
“,$s); // => क. ಕ. के. ಕೆ.
我对@Wiktor有疑问。这一个也与单词的
最后一个字符匹配,如下所示ಹೇಳಿದ್ದೇ<代码>ನೆ.即使没有分词,它也会选择这种组合。有什么想法吗?@PrashanthBenny对,这是因为变音符号。添加负查找:
“~\b(?)?
$s = "क. ಕ. के. ಕೆ. ";
echo preg_replace('~\b(?<!\p{M})\p{L}\p{M}*+\.~u', '<pre>$0</pre>', $s); 
// => <pre>क.</pre> <pre>ಕ.</pre> <pre>के.</pre> <pre>ಕೆ.</pre>