регулярное выражение для соответствия инициалам имени - PCRE - PullRequest
0 голосов
/ 14 января 2019

У меня есть регулярное выражение для получения инициалов имени, как показано ниже:

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

отлично работает с английским и другими языками, пока не появятся графемы и не появятся комбинированные символы. Как
на хинди и
в Каннаде
подбираются
Но,
के этот на хинди,
ಕೆ этот в Каннаде
не соответствует этому регулярному выражению.
Я пытаюсь получить инициалы от имени, такого как J.P.Morgan и т. Д.
Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 14 января 2019

Вам необходимо сопоставлять диакритические знаки после базовых букв, используя \p{M}*:

'~\b(?<!\p{M})\p{L}\p{M}*\.~u'

Шаблон соответствует

  • \b - граница слова
  • (?<!\p{M}) - символ перед текущей позицией не должен быть диакритическим символом (без него совпадение может происходить в пределах одного слова)
  • \p{L} - любая базовая буква Unicode
  • \p{M}* - 0+ диакритических знаков
  • \. - точка.

См. PHP демо онлайн :

<code>$s = "क. ಕ. के. ಕೆ. ";
echo preg_replace('~\b(?<!\p{M})\p{L}\p{M}*+\.~u', '<pre>$0
', $ s); // =>
क.
ಕ.
के.
ಕೆ.
...