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

时间:2019-01-14 09:28:56

标签: php regex pcre grapheme

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

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

它可以与英语和其他语言一起正常工作,直到出现字素和组合字符为止。 喜欢
(印地语和
在卡纳达语
被匹配
但是
के,这是北印度文,
ಕೆ的卡纳达语
与此正则表达式不匹配。
我正试图从摩根大通(J.P. Morgan)等名字取名字的缩写。
任何帮助将不胜感激。

1 个答案:

答案 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>