Подтвердить что ты не робот

Регулярное выражение в Bash Script

Привет, удивительное сообщество,

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

Что я пытаюсь сделать:
Проверьте, соответствует ли строка этому формату:

10_06_13

т. Сегодняшняя дата или аналогичная дата с "2digits_2digits_2digits"

Что я сделал:

regex='([0-9][0-9][_][0-9][0-9][_][0-9][0-9])'
if [[ "$incoming_string" =~ $regex ]]
then
   # Do awesome stuff here
fi

Это работает в определенной степени. Но когда входящая строка равна 011_100_131... она все равно проходит проверку регулярного выражения.

Буду признателен, если кто-нибудь сможет мне помочь в правильном направлении.
Приветствия

4b9b3361

Ответ 1

=~ выполняется успешно, если строка слева содержит совпадение для регулярного выражения справа. Если вы хотите знать, соответствует ли строка регулярному выражению, вам необходимо "привязать" регулярное выражение с обеих сторон, например:

regex='^[0-9][0-9][_][0-9][0-9][_][0-9][0-9]$'
if [[ $incoming_string =~ $regex ]]
then
  # Do awesome stuff here
fi

^ выполняется только в начале строки, а $ - только в конце.

Примечания:

  • Я удалил ненужный () из регулярного выражения и "" из [[ ... ]].
  • Руководство bash плохо написано, так как оно говорит, что =~ преуспевает, если строка соответствует.