首页 > 解决方案 > PHP从字符串中查找月份和年份?

问题描述

这是我迄今为止从任何类型的字符串中尝试过的。

<?php

  $variable = [
      'Well year is 1967 month jan',
      'year is 1876 but month January',
      'HOLLA April Evening 2017',
      'DOLLA-May 2020',
      'OH-YESApril 2019 (IGNORE)',
      'Just a sample String without year ok lets just add 1'
  ];
  foreach ($variable as $value) {
      if(ContainsNumbers($value)){
           $input = preg_replace('/^[^\d]*(\d{4}).*$/', '\1', $value);
            $input = (int)$input;
                if($input>1000 && $input<2100)
                {
                   var_dump($input);
                }                   
      } 
  }
  function ContainsNumbers($String){
    return preg_match('/\\d/', $String) > 0;
}
?>

这是上面代码的输出

int(1967)
int(1876)
int(2017)
int(2020)
int(2019)

我现在唯一想要的是从字符串中获取月份。一个月以来,我从这个链接获得了帮助,但到目前为止还没有运气:-我不知道要添加什么$data

$str = 'December 2012 Name: Jack Brown';
$ptr = "/^(?P<month>:Jan(?:uary)?|Feb(?:ruary)?|Dec(?:ember)?) (?P<year>:19[7-9]\d|2\d{3}) (Name:(?P<name>(.*)))/";
 var_dumb(preg_match($ptr, $str, $data););

这里是游乐场

标签: phpregexpreg-match

解决方案


传统上,几乎每个人都将第三个参数称为preg_match $matches,所以我将在这里使用命名法。

如果 RegEx 匹配,第三个参数将是一个数组,其中包含每个项目的数字索引,以及命名索引(如果您有任何命名匹配)。所以你正在寻找:

if(preg_match($ptr, $str, $matches)){
    var_dump($matches);
}

这会给你:

Array
(
    [0] => December 2012 Name: Jack Brown
    [month] => December
    [1] => December
    [year] => 2012
    [2] => 2012
    [3] => Name: Jack Brown
    [name] =>  Jack Brown
    [4] =>  Jack Brown
    [5] =>  Jack Brown
)

推荐阅读