获取字符串中每个单词的第一个字母

新手上路,请多包涵

我如何获得给定字符串的每个单词的第一个字母?

 $string = "Community College District";
$result = "CCD";

我找到了 javascript 方法,但不确定如何将其转换为 php。

原文由 Grigor 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 607
2 个回答

explode() 在空格上,然后使用适当的子字符串方法访问每个单词的第一个字符。

 $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");

原文由 Michael Berkowski 发布,翻译遵循 CC BY-SA 4.0 许可协议

实现此目的的最佳方法是使用正则表达式。

让我们以合乎逻辑的方式分解您想要的内容:您希望字符串中的每个字符都位于单词的开头。识别这些字符的最佳方法是查找前面有空格的字符。

所以我们从 那个 空格字符的后视开始,然后是任何字符:

 /(?<=\s)./

这将找到前面有空格的任何字符。但是 - 字符串中的第一个字符是字符串中的一个字符,是您要提取的字符。因为它是字符串中的第一个字符,所以它前面不能有空格。所以我们想要匹配任何以空格 字符串中的第一个字符开头的内容,所以我们添加一个 主题开始断言

 /(?<=\s|^)./

现在我们越来越近了。但是,如果字符串包含多个空格块怎么办?如果它包含一个空格后跟一个标点符号怎么办?我们可能不想匹配其中任何一个,在 fat 中我们可能只想匹配字母。我们可以用“任何单词字符” \w 转义序列来做到这一点。我们可以使用 i 修饰符 以及 u 修饰符使表达式不区分大小写以支持 utf-8 字符。

所以我们最终得到:

 /(?<=\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]));

原文由 DaveRandom 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题