我有一个字符串变量,我想得到它每个单词的第一个字母。我希望最终结果是第一个字母的数组。
$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];
}