我有一个字符串变量,我想得到它的每个单词的第一个字母.我希望最终结果是首字母数组.
$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}应该覆盖驼峰情况的小写字符,原始表达式涵盖了连字符-用于分隔两个单词时的情况.
| 归档时间: |
|
| 查看次数: |
11336 次 |
| 最近记录: |