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>