if [[ " " =~ ^[0-9]*$ ]]; then echo "si"; else echo "no"; fi; //Echoes No
if [[ "" =~ ^[0-9]*$ ]]; then echo "si"; else echo "no"; fi; //Echoes Yes
这是一个错误还是我错过了什么?
答案 0 :(得分:3)
这是预期的。您指定了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
答案 1 :(得分:2)
第一个是空格,与[0-9]*
正则表达式不匹配。
第二个是空的,[0-9]*
因为*
也暗示0个虚位。如果你使它与+
至少匹配一个,那么它就是假的:
$ if [[ " " =~ ^[0-9]+$ ]]; then echo "si"; else echo "no"; fi;
no
答案 2 :(得分:2)
*
表示“0或更多”,因此目标字符串中没有任何内容,正则表达式很容易匹配。
答案 3 :(得分:2)
[0-9]*
匹配零或更多数字,所以是的,它匹配空字符串。如果您不想匹配空字符串,请使用匹配一个或更多数字的[0-9]+
。