Найти первую дату в строке

У меня есть файл PDF, который я проанализировал с помощью плагина «pdfparser». Из текста страниц мне нужно найти первую дату после определенной строки (строки поиска). Я могу найти строку поиска и для извлечения даты я использовал

date_parse($string)

он извлекает дату, месяц в порядке, но я думаю, что из-за большой строки (с еще несколькими датами, числами) он не заполняет правильный год, он дает случайное число, которого даже нет в документе.

Есть ли другой способ получить эту дату. Ниже приведен пример строки (она имеет больше даты после даты)

Satisfaction of the mortgage from Karen Ann Lewis,a single woman to Bank of America, N.A. recorded March 4, 2004

person nOmi    schedule 04.01.2018    source источник
comment
eval.in/930330   -  person splash58    schedule 04.01.2018


Ответы (1)


Вы можете попробовать следующее RegEx (чтобы извлечь первую дату в предоставленном вами формате), а затем использовать parse_date():

$str = 'Satisfaction of the mortgage from Karen Ann Lewis,a single woman to Bank of America, N.A. recorded March 4, 2004';

preg_match("/(Jan(uary)?|Feb(ruary)?|Mar(ch)?|Apr(il)?|May|Jun(e)?|Jul(y)?|Aug(ust)?|Sep(tember)?|Oct(ober)?|Nov(ember)?|Dec(ember)?)\s+\d{1,2},\s+\d{4}/", $str, $matches);

var_dump( date_parse($matches[0]) );

Вышеуказанные результаты:

array(12) {
  ["year"]     => int(2004)
  ["month"]    => int(3)
  ["day"]      => int(4)
  ["hour"]     => bool(false)
  ["minute"]   => bool(false)
  ["second"]   => bool(false)
  ["fraction"] => bool(false)
  ...
}

Демо здесь

person BenM    schedule 04.01.2018
comment
спасибо, это работает, но есть ли вариант, что если формат даты изменится - person nOmi; 04.01.2018
comment
Ну, я боюсь, что вам нужно будет написать новый RegEx. - person BenM; 04.01.2018
comment
@nOmi Да, именно так. - person BenM; 04.01.2018
comment
я использовал date_parse, чтобы получить первые 2, и регулярное выражение для извлечения года, таким образом, по крайней мере, день и месяц заполняются для каждого формата. - person nOmi; 04.01.2018