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

如何从混合字符串中提取年份?(PHP)

提取字符串数组中的年份值解决方案

嘿,这个需求很清晰,咱们可以用正则表达式轻松搞定——毕竟你的所有年份都是4位数字且以20开头,完全可以精准匹配。下面给你两种实用的方法,按需选择:

方法一:通用正则匹配(最健壮)

这种方法不管年份出现在字符串的哪个位置,都能准确提取,还会自动去重每个字符串里的重复年份:

// 定义你的字符串数组
$str = [
    "November 28th, 2014 | 0 - 9, 2014, Karthik Nallamuthu",
    "October 6th, 2015 | 0 - 9, 2015, D. Imman",
    "November 22nd, 2017 | 0 - 9, 2017",
    "December 18th, 2009 | 0 - 9",
    "December 18th, 2009 | 0 - 9",
    "October 30th, 2015 | 0 - 9, 2015, Sean Roldan",
    "December 18th, 2009 | 0 - 9",
    "November 25th, 2011 | 0 - 9, 2011 |"
];

$extractedYears = [];
foreach ($str as $item) {
    // 匹配20开头的4位年份,\b确保是完整的年份单词,避免匹配到不完整的数字片段
    preg_match_all('/\b20\d{2}\b/', $item, $matches);
    // 去重当前字符串里的重复年份,取第一个(或唯一的那个)
    $uniqueYear = array_unique($matches[0]);
    $extractedYears[] = reset($uniqueYear);
}

// 输出结果
print_r($extractedYears);

执行后会得到:

Array
(
    [0] => 2014
    [1] => 2015
    [2] => 2017
    [3] => 2009
    [4] => 2009
    [5] => 2015
    [6] => 2009
    [7] => 2011
)

方法二:基于字符串结构的分割(更高效,适合固定格式)

如果你的字符串格式永远是「日期 + | + 其他内容」,可以直接分割字符串提取日期部分的年份,性能会略好一点:

$extractedYears = [];
foreach ($str as $item) {
    // 按逗号分割,取日期部分的后半段
    $dateSegment = explode(',', $item)[1];
    // 从该段提取4位数字
    preg_match('/\d{4}/', $dateSegment, $match);
    $extractedYears[] = $match[0];
}

print_r($extractedYears);

额外需求:提取所有不重复的年份

如果需要整个数组里的唯一年份集合,只需要在最后加一行:

$uniqueYears = array_unique($extractedYears);
print_r($uniqueYears);

这样就能得到:

Array
(
    [0] => 2014
    [1] => 2015
    [2] => 2017
    [3] => 2009
    [7] => 2011
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:38:43