如何从混合字符串中提取年份?(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
相关产品推荐
相关产品推荐

