Как написать preg_match для даты, за которой следует определенная строка?

Я хочу извлечь дату из нескольких HTML-документов. Дата всегда следует этому шаблону:

  1. Начиная с трех алфавитов месяца с первого символа в верхнем регистре то есть янв.
  2. Двузначные числовые символы дня месяца i-e 09
  3. Запятая как разделитель
  4. Четырехзначные цифровые символы года i-e 2022.

Образец полной даты: 09 января 2022 г.

Я хочу извлечь только те даты, которые заключены в теги span. Итак, полная схема

<span>Jan 09, 2022</span>

Я не умею писать preg_match. Кто-нибудь может мне помочь, пожалуйста!

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
36
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

<span>(\w{3} \d{1,2}, \w{4})</span>

\w — это метасимвол множества [a-zA-Z0-9_].

{3} означает трижды.

\d — это метасимвол множества [0-9].

{1,2} означает один или два раза.

Попробуйте https://regex101.com/r/tNRa73/1

$pattern = '/<span>(\w{3} \d{1,2}, \w{4})</span>/'; 

preg_match(
  $pattern,
  $html,
  $matches // <-- The results will be added to this new variable.
);

$matches[1]; // The date will be in the first index because it was
             // the first "capture group" i.e set of parens.


// If you expect multiple dates in one HTML document, then use:
preg_match_all(
  $pattern,
  $html,
  $matches
);

$matches[1]; // Now, the first index is an array of matches of
             // the first "capture group".
\w соответствует любому символу слова (эквивалентен [a-zA-Z0-9_])
vee 28.03.2022 10:01

@rhinosforhire Большое спасибо за вашу помощь. Не могли бы вы немного помочь, изменив этот шаблон для случая, если значение дня является однозначным или двузначным. Пока я использовал ваш шаблон, я обнаружил, что некоторые даты в документах содержат день как одну цифру, например, 9 января 2022 г.

zish 28.03.2022 10:09

Спасибо, что заметили это, @vee. @zish, я изменил квантификатор, чтобы он совпадал один или два раза по запросу, то есть {1,2}.

rhinosforhire 28.03.2022 10:22

Другие вопросы по теме