Парсинг строки с помощью регулярного выражения

Помогите вытащить данные из строки с помощью регулярного выражения. Ко мне приходит строка: <td class="news_date">21 мар 2022 </td><td><a href="https://www.bills.ru/news/? bid=598344">Минстрой не планирует вводить мораторий на начисление пеней и долгов по ЖКУ</a> <span class="bizon_api_news_original_date">(от 21 мар 2022)</span></td></tr><tr class="'

  1. С помощью выражения preg_match('/[0-9]{1,2}\s[а-я].+?/iU', $item, $arr) я получаю '21 мар 2022 </td>'
  2. Далее с помощью инструкции preg_replace("/^\s*|\s*$/", '', str_replace('</td>', '', $arr)) привожу строку в состояние "21 мар 2022"

Вопрос: Как с помощью первого регулярного выражении (в п. 1) все почистить, функция trim не работает почему то.


Ответы (1 шт):

Автор решения: Алексей Р

Вариант с одним preg_replace(). Удаляем все символы с начала строки до первой цифры ИЛИ все символы после первого вхождения 4-х цифр до конца строки ИЛИ все подряд идущие пробельные символы, кроме первого

<?php 
$array = [
    '<td class="news_date">21 мар 2022        </td><td><a href="https://www.bills.ru/news/?  bid=598344">Минстрой не планирует вводить мораторий на начисление пеней и долгов по ЖКУ</a>                        <span class="bizon_api_news_original_date">(от 21 мар 2022)</span></td></tr><tr class="',
    '<td class="news_date">  25   апреля   2023        </td><td><a href="https://www.bills.ru/news/?  bid=598344">Минстрой не планирует вводить мораторий на начисление пеней и долгов по ЖКУ</a>                        <span class="bizon_api_news_original_date">(от 21 мар 2022)</span></td></tr><tr class="'
    ];
$res = preg_replace('/^[^\d]*|(?<=\d{4}).*$|(?<=\s)\s+/', "", $array);
var_dump($res);
?>
array(2) {
  [0]=>
  string(14) "21 мар 2022"
  [1]=>
  string(20) "25 апреля 2023"
}
→ Ссылка