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

PHP中如何移除字符串数字并提取至数组?已尝试preg_split无效

解决PHP中提取字符串数字并保留单词结构的问题

嘿,这个需求用正则表达式就能轻松搞定,不用写繁琐的循环~我给你两个关键的正则函数组合,完美匹配你的需求:

步骤1:提取数字到数组

用preg_match_all匹配字符串里所有连续的数字序列,再把匹配结果转成整数数组:

$string = "take_me_apart_12_13";
preg_match_all('/\d+/', $string, $matches);
$numbers = array_map('intval', $matches[0]);
// $numbers 现在是 [12, 13]

步骤2:清理字符串,保留单词与下划线

用preg_replace把所有_数字的模式替换为空,这样既移除了数字,又不会破坏原有的单词结构:

$cleanString = preg_replace('/_\d+/', '', $string);
// $cleanString 现在是 "take_me_apart"

完整示例代码

$string = "take_me_apart_12_13";

// 提取数字数组
preg_match_all('/\d+/', $string, $numberMatches);
$numbers = array_map('intval', $numberMatches[0]);

// 清理字符串
$cleanString = preg_replace('/_\d+/', '', $string);

// 验证结果
echo "清理后的字符串:{$cleanString}\n";
print_r($numbers);

额外说明

如果你的场景里数字只会出现在字符串末尾,可以把清理字符串的正则改成更精准的版本,避免误删中间可能出现的数字(虽然你的例子里没有,但多一层保障):

$cleanString = preg_replace('/(_\d+)+$/', '', $string);

这个正则只会匹配字符串末尾连续的_数字部分,比如对于"test_123_abc_45_67",会得到"test_123_abc",而不是把所有_数字都删掉。

这样的方法比循环高效得多,而且代码简洁易读,完全满足你的需求~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:06:13