我有一个字符串变量,我想获取它的每个单词的第一个字母。
我希望最终结果是第一个字母的数组。
$language = 'Sample Language';
preg_match('/(\b[a-z])+/i', $language, $match);
print_r($match);
我得到的只是第一个单词的第一个字母。
上面打印 Array([0]=>S [1]=>S)
如果我把它改成
preg_match('/(\bL)+/i', $language, $match);
我可以找到第二个单词的 L 的匹配项。很明显,在第一场比赛之后,它就不再寻找剩下的比赛了。我不太擅长正则表达式。谁能指出我做错了什么?
输入字符串中的单词并不总是用空格分隔。这是相当不可预测的。我遇到过的一些格式:
“主要语言:语言”
“主要语言、语言”
“MainLanguage:Language-SubLanguage”这里我想得到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}
它应该涵盖驼峰式情况,原始表达式涵盖连字符时的情况-
用于分隔两个词。
Regex101 演示
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)