Bash Regex for empty string返回true

时间:2013-11-18 13:30:35

标签: regex bash

if [[ " " =~ ^[0-9]*$ ]]; then echo "si"; else echo "no"; fi; //Echoes No

if [[ "" =~ ^[0-9]*$ ]]; then echo "si"; else echo "no"; fi; //Echoes Yes

这是一个错误还是我错过了什么?

4 个答案:

答案 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]+