Bash регулярное выражение Гоча
У меня есть небольшая проблема, которую я действительно не могу понять:
bash -c 'if [[ "hello" =~ ^[a-zA-Z0-9]\{1,\}\\.$ ]] ; then echo "OK" ; else echo "KO" ; fi
Я думаю, что это должно дать мне KO, и это дает мне ОК... Я хотел бы сопоставить вещи по крайней мере с 1 символом и заканчивая точкой...
Я наконец заметил, что он работает с версией bash 4.1.5, а не с версией 3.2.25
Как мне поступить с этой версией?
РЕДАКТИРОВАТЬ:
Я нашел обходной путь, который работает, но я не знаю, почему мне пришлось заключить экранированную точку в скобки:
bash -c 'if [[ "hello" =~ ^[a-zA-Z0-9]{1,}[\.]$ ]] ; then echo "OK" ; else echo "KO" ; fi'
2 ответа
Вы не избежали точки, поэтому она используется в качестве символа подстановки и соответствует любому символу. Заменить .
с \.
Кроме того, вместо {1,}
использовать +
потому что они эквивалентны.
.
является особенным в регулярных выражениях ("соответствовать любым символам"). Побег как \.