匹配姓名首字母的正则表达式 - 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+ 变音符号
\.
- 一个点。
$s = "क. ಕ. के. ಕೆ. ";
echo preg_replace('~\b(?<!\p{M})\p{L}\p{M}*+\.~u', '<pre>[=11=]</pre>', $s);
// => <pre>क.</pre> <pre>ಕ.</pre> <pre>के.</pre> <pre>ಕೆ.</pre>
我有一个正则表达式来获取姓名的首字母,如下所示:
/\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+ 变音符号\.
- 一个点。
$s = "क. ಕ. के. ಕೆ. ";
echo preg_replace('~\b(?<!\p{M})\p{L}\p{M}*+\.~u', '<pre>[=11=]</pre>', $s);
// => <pre>क.</pre> <pre>ಕ.</pre> <pre>के.</pre> <pre>ಕೆ.</pre>