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

如何提取字符串中最后4个连续数字?正则/PHP/Laravel实现方案

实现方案

一、正则表达式实现

直接使用贪婪匹配的正则,捕获最后出现的4位连续数字:

.*(\d{4})

原理

  • .* 以贪婪模式匹配任意字符,会尽可能向后匹配,直到遇到最后一组符合\d{4}的连续数字
  • (\d{4}) 捕获这最后一组4位数字,作为结果提取

注意事项

若字符串中不存在任何4位连续数字,该正则会匹配失败,需额外处理此场景。

二、PHP原生实现

方式1:使用preg_match

借助上述正则,通过preg_match快速提取结果:

$string = "ABCD1234567890F23";
if (preg_match('/.*(\d{4})/', $string, $matches)) {
    $result = $matches[1]; // 输出7890
} else {
    $result = null; // 无匹配时返回null
}

方式2:字符串序列遍历(无正则依赖)

若不想依赖正则,可先提取所有连续数字序列,再从后往前找第一个长度≥4的序列,取其最后4位:

$string = "ABC123456789A9876";
preg_match_all('/\d+/', $string, $numSequences);
$result = null;

if (!empty($numSequences[0])) {
    // 从后往前遍历数字序列
    foreach (array_reverse($numSequences[0]) as $seq) {
        if (strlen($seq) >= 4) {
            $result = substr($seq, -4);
            break;
        }
    }
}

三、Laravel框架实现

Laravel的Str工具类可简化正则匹配操作,以下是两种常用写法:

方式1:使用Str::match

use Illuminate\Support\Str;

$string = "ABCDEFG1234-!.567";
$matches = Str::match('/.*(\d{4})/', $string);
$result = $matches ? $matches[1] : null; // 输出1234

方式2:链式调用写法

use Illuminate\Support\Str;

$result = Str::of("1234ABCD567JIJLMN")
    ->match('/.*(\d{4})/')
    ->get(1) ?? null; // 输出1234

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 11:07:04