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


How to get first letter of every word using regex in PHP

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

$language = 'Sample Language';
preg_match('/('b[a-z])+/i', $language, $match);
print_r($match);

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

如果我将其更改为

preg_match('/('bL)+/i', $language, $match);

我可以得到第二个单词的L的匹配。所以很明显,在第一场比赛之后,它不再寻找其余的。我不太擅长正则表达式。谁能指出我做错了什么?

输入字符串中的单词并不总是用空格分隔。这是相当不可预测的。我遇到的一些格式:"主要语言:语言"主要语言,语言"主语言:语言-子语言"在这里我想得到M,L和S

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

$language = 'Sample Language';
preg_match_all('/'b'w/', $language, $match);
print_r($match);
  • 'b:匹配单词边界,单词边界是将单词字符与非单词字符分开的位置。单词字符通常[a-zA-Z0-9_]
  • 'w :匹配单词字符。
  • 'b'w 匹配位于单词边界位置的单词字符,在本例中,紧跟在分隔单词的空格或字符串开头之后。

如果你想要骆驼的情况,那么你可以将前面的表达式与另一个表达式结合起来,如下所示:

'b'w|(?<='p{Ll})'p{Lu}

表达式的第二部分,即(?<='w)'p{Lu}如果它是大写字符,则应匹配任何单词字符'p{Lu}在小写字符之后'p{Ll}应涵盖骆驼大小写的情况,原始表达式涵盖了使用连字符-分隔两个单词的情况。

正则表达式 101 演示

你能试试这个吗,

    $language = 'Sample Language';
    $language = explode(" ", $language);
    foreach ($language as $value) {
        echo $firstLetter = $value[0];
    }