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
相关产品推荐
相关产品推荐

