如何提取字符串中最后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
相关产品推荐
相关产品推荐

