Какое регулярное выражение найдет мой формат даты и времени? - PullRequest
3 голосов
/ 26 июня 2019

Я создал регулярное выражение для даты со временем, отформатированный так:

25.06.19 / 16: 30

Я создал следующее регулярное выражение:

^[0-9]{2}\.[0-9]{2}\.[0-9]{4}\s.\/\s.[0-9]{2}\:[0-9]{2}$

Результат должен дать вышеуказанное совпадение, но это не так. Можете ли вы помочь мне исправить мое регулярное выражение?

1 Ответ

3 голосов
/ 26 июня 2019

Ваш год может состоять из двух или четырех цифр, используйте

regex='^[0-9]{2}\.[0-9]{2}\.[0-9]{2}([0-9]{2})?[[:space:]]*/[[:space:]]*[0-9]{2}:[0-9]{2}$'
#                                   ^^^^^^^^^^^

Bash demo :

s="25.06.19 / 16:30"
regex='^[0-9]{2}\.[0-9]{2}\.[0-9]{2}([0-9]{2})?[[:space:]]*/[[:space:]]*[0-9]{2}:[0-9]{2}$'
if [[ "$s" =~ $regex ]]; then
  echo "Matched!"
fi;

Заметьте, я также заменил \s на [[:space:]], который должен иметь более широкую поддержку в Bash, и / не нуждается в экранировании, поскольку здесь нет разделителей регулярных выражений, а / не является специальным метасимволом регулярных выражений. Кроме того, точки в \s.\/\s. являются подозрительными, я так понимаю, вы хотели сопоставить любые 0 или более пробелов, поэтому я заменил . на *.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...