Регулярное выражение в 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
... она все равно проходит проверку регулярного выражения.
Буду признателен, если кто-нибудь сможет мне помочь в правильном направлении.
Приветствия
Ответы
Ответ 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 плохо написано, так как оно говорит, что
=~
преуспевает, если строка соответствует.