if [[ " " =~ ^[0-9]*$ ]]; then echo "si"; else echo "no"; fi; //Echoes No
if [[ "" =~ ^[0-9]*$ ]]; then echo "si"; else echo "no"; fi; //Echoes Yes
Является ли это ошибкой или что-то не хватает?Bash Regex для пустой строки возвращает true
if [[ " " =~ ^[0-9]*$ ]]; then echo "si"; else echo "no"; fi; //Echoes No
if [[ "" =~ ^[0-9]*$ ]]; then echo "si"; else echo "no"; fi; //Echoes Yes
Является ли это ошибкой или что-то не хватает?Bash Regex для пустой строки возвращает true
Это как и ожидалось. Вы указали 0 или более раз (*
) цифру ([0-9]
). Пустая строка в 0 раз.
Используйте +
(что означает «1 или более раз») вместо *
:
if [[ " " =~ ^[0-9]+$ ]]; then echo "si"; else echo "no"; fi; // Should echo No
if [[ "" =~ ^[0-9]+$ ]]; then echo "si"; else echo "no"; fi; // Should echo No
Первый - это пробел, который не соответствует регулярному выражению [0-9]*
.
Второй номер пуст, который является [0-9]*
, потому что *
также подразумевает 0 валютных курсов. Если вы сделаете это соответствует по крайней мере один ocurrency с +
, то это неверно:
$ if [[ " " =~ ^[0-9]+$ ]]; then echo "si"; else echo "no"; fi;
no
*
в регулярном выражении означает «0 или более», так что ничего в целевой строке, регулярное выражение соответствует тривиальным.
[0-9]*
соответствует ноль или более цифр, поэтому да, он соответствует пустой строке. Если вы не хотите соответствовать пустой строке, используйте [0-9]+
, который соответствует одному или более цифрам.
Спасибо Я совершенно забыл об этих основах. – JorgeeFG