如何在PHP中使用正则表达式获取每个单词的第一个字母

kur*_*rry 7 php regex

我有一个字符串变量,我想得到它的每个单词的第一个字母.我希望最终结果是首字母数组.

$language = 'Sample Language';
preg_match('/(\b[a-z])+/i', $language, $match);
print_r($match);
Run Code Online (Sandbox Code Playgroud)

我得到的只是第一个单词的第一个字母.以上打印数组([0] => S [1] => S)

如果我改成它

preg_match('/(\bL)+/i', $language, $match);
Run Code Online (Sandbox Code Playgroud)

我可以得到第二个字的L匹配.很明显,在第一场比赛之后,它停止寻找剩下的比赛.我对正则表达式不是很了解.谁能指出我做错了什么?

输入字符串中的单词并不总是用空格分隔.这是非常不可预测的.我遇到的一些格式:"MainLanguage:Language""MainLanguage,Language""MainLanguage:Language-SubLanguage"在这里我想得到M,L和S

Ibr*_*jar 16

首先preg_match_all用于此,其次你不需要+量词:

$language = 'Sample Language';
preg_match_all('/\b\w/', $language, $match);
print_r($match);
Run Code Online (Sandbox Code Playgroud)
  • \b:匹配单词边界,单词边界是将单词字符与非单词字符分隔开的位置.通常是单词字符[a-zA-Z0-9_].
  • \w:匹配单词字符.
  • \b\w 匹配位于单词边界位置的单词字符,在这种情况下紧跟在空格或分隔单词的字符串开头之后.

如果您想要驼峰情况,那么您可以将前一个表达式与另一个表达式组合,如下所示:

\b\w|(?<=\p{Ll})\p{Lu}
Run Code Online (Sandbox Code Playgroud)

表达式的第二部分,即(?<=\w)\p{Lu}应该匹配任何单词字符,如果它是一个大写字符\p{Lu}后面\p{Ll}应该覆盖驼峰情况的小写字符,原始表达式涵盖了连字符-用于分隔两个单词时的情况.

Regex101演示