我如何获得给定字符串的每个单词的第一个字母?
$string = "Community College District";
$result = "CCD";
我找到了 javascript 方法,但不确定如何将其转换为 php。
原文由 Grigor 发布,翻译遵循 CC BY-SA 4.0 许可协议
我如何获得给定字符串的每个单词的第一个字母?
$string = "Community College District";
$result = "CCD";
我找到了 javascript 方法,但不确定如何将其转换为 php。
原文由 Grigor 发布,翻译遵循 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 许可协议
2 回答1.3k 阅读✓ 已解决
1 回答2.8k 阅读✓ 已解决
2 回答824 阅读✓ 已解决
1 回答904 阅读✓ 已解决
1 回答1k 阅读✓ 已解决
2 回答882 阅读
1 回答873 阅读
explode()
在空格上,然后使用适当的子字符串方法访问每个单词的第一个字符。如果您期望多个空格可以分隔单词,请改用
preg_split()
或者,如果不是空格的字符分隔单词(
-,_
),例如,也使用preg_split()
: