Регулярное выражение, для удаления всего, кроме даты

Есть набор строк, где помимо даты еще накидано всякого мусора. На пример

  • 01.03.2017 (some garbage № BP-26/17
  •       21.12.2017 info
    

и т.д. Строка не всегда начинается с даты. Там могут быть табы, пробелы, перевод стоки, неразделяющий пробел и т.д Надо удалить все, кроме даты. Саму дату выловить нетрудно: (\d{2}.\d{2}.\d{4}). А как сделать отрицание не для набора символов, а для шаблона?


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

Автор решения: Jug-IT

Решение задачи средствами php:

<?php
$str = "      10.12.2017 info";
if (preg_match("/^[\D]*\d{2}.\d{2}.\d{4}/", $str)) {
    echo "Вхождение найдено.";
} else {
    echo "Вхождение не найдено.";
}
?>
→ Ссылка
Автор решения: edem

В можно использовать s///:

perl -E '$str="      21.12.2017 info"; $str=~s/.*(\d{2}\.\d{2}.\d{4}).*/$1/; say $str'
21.12.2017
→ Ссылка