You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP实现字符串单词与数字计数:如何将带空格的连续号码计为一个词

解决方案

str_word_count 原生默认以空白字符作为单词分隔边界,没有内置参数可以自定义分隔符规则,要实现连续带空格的数字串视为一个单词,推荐以下两种可行方案:

方案1:预处理+原生str_word_count实现

思路是先临时替换数字之间的空格为不会和业务内容冲突的占位符,统计完成后再还原:

  • 用正则把所有数字之间的空格替换为临时占位符(如下划线)
  • 调用str_word_count时把占位符加入允许的字符列表
  • 遍历结果把占位符换回空格,得到合并后的完整号码
$string = "Patrick Kelly born in Italy. Tel. 654 646 547";
// 预处理:替换数字间的空格为下划线
$processed = preg_replace('/(\d) +(\d)/', '$1_$2', $string);
// 统计单词,允许.、数字、下划线作为单词组成部分
$words = str_word_count($processed, 2, '.0123456789_');
// 还原占位符为空格
$words = array_map(function($item) {
    return str_replace('_', ' ', $item);
}, $words);
print_r($words);
// 统计总数量直接用count($words)即可

如果原字符串本身包含下划线,可以把占位符替换为#等其他不会出现的字符即可。

方案2:正则自定义匹配规则(更灵活)

不需要依赖str_word_count的内置规则,直接通过正则匹配你需要的统计单元,一步到位:

$string = "Patrick Kelly born in Italy. Tel. 654 646 547";
// 正则规则:匹配普通单词(含字母和点)/ 带空格的连续数字串
preg_match_all('/[A-Za-z.]+|\d+(?: +\d+)+/', $string, $matches);
$words = $matches[0];
print_r($words);
echo "总单词数:" . count($words);

如果需要调整单词允许的字符,直接修改正则里的字符组规则即可,适配性更高。

内容的提问来源于stack exchange,提问作者Diana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 20:09:03