获取字符串中每个单词的第一个字母
如何获取给定字符串的每个单词的第一个字母?
$string = "Community College District";
$result = "CCD";
我找到了javascript方法,但不确定如何将其转换为php。
如何获取给定字符串的每个单词的第一个字母?
$string = "Community College District";
$result = "CCD";
我找到了javascript方法,但不确定如何将其转换为php。
在空格上分解(),
然后使用适当的子字符串方法来访问每个单词的第一个字符。
$words = explode(" ", "Community College District");
$acronym = "";
foreach ($words as $w) {
$acronym .= mb_substr($w, 0, 1);
}
如果您期望多个空格可以分隔单词,请改为preg_split()
$words = preg_split("/\s+/", "Community College District");
或者,如果空格以外的字符分隔单词 (),例如,也请使用:-,_
preg_split()
// Delimit by multiple spaces, hyphen, underscore, comma
$words = preg_split("/[\s,_-]+/", "Community College District");
实现此目的的最佳方法是使用正则表达式。
让我们以合乎逻辑的方式分解你想要的东西:你希望字符串中的每个字符都在单词的开头。识别这些字符的最佳方法是查找前面带有空格的字符。
因此,我们从该空间字符的后置外观开始,后跟任何字符:
/(?<=\s)./
这将找到前面带有空格的任何字符。但是 - 字符串中的第一个字符是字符串中的字符是您想要提取的字符。因为它是字符串中的第一个字符,所以它不能以空格开头。因此,我们希望匹配字符串中以空格或第一个字符开头的任何内容,因此我们添加一个主题开头断言:
/(?<=\s|^)./
现在我们越来越近了。但是,如果字符串包含多个空格的块呢?如果它包含一个空格,后跟一个标点符号字符,该怎么办?我们可能不想匹配其中任何一个,在脂肪中,我们可能只想匹配字母。我们可以通过“任何单词字符”转义序列来做到这一点。我们可以使用修饰符和修饰符来支持utf-8字符,使表达式不区分大小写。\w
i
u
因此,我们最终得到:
/(?<=\s|^)\w/iu
但是我们如何在PHP中实际使用它呢?好吧,我们希望匹配字符串中正则表达式的所有匹配项,因此我们使用(您猜对了)preg_match_all()
:
$string = "Progress in Veterinary Science";
$expr = '/(?<=\s|^)\w/iu';
preg_match_all($expr, $string, $matches);
现在我们有了想要提取的所有字符。要构造您显示的结果字符串,我们需要再次将它们连接在一起:
$result = implode('', $matches[0]);
...我们需要确保它们都是大写的:
$result = mb_strtoupper($result);
这就是它的全部内容。
这是一个稍微压缩的版本,使用Leigh注释中的替代正则表达式来“捕获由连字符,句号等分隔的单词的首字母”。(而不仅仅是空格。
$str="Foo Bar";
preg_match_all('/(?<=\b)\w/iu',$str,$matches);
$result=mb_strtoupper(implode('',$matches[0]));