预计正则expression式数字模式

我有一个期待脚本这个问题。 我想捕获一个命令的输出是“0”,并区分其他数字或链如“000”或“100”

我的代码是:

#!/usr/bin/expect -f set timeout 3 spawn bash send "echo 0\n" expect { -regexp {^0$} { send_user "\nzero\n" } -re {\d+} { send_user "\number\n"} } send "exit\n" 

我有以下回应:

 spawn bash echo 0 number 

但是下面的正则expression式不起作用:

 -regexp {^0$} { send_user "\nzero\n" } 

如果我将其更改为:

 -regexp {0} { send_user "\nzero\n" } 

作品,但它也捕获“00”“10”“1000”等

 send "echo 100\n" expect { -regexp {0} { send_user "\nzero\n" } -re {\d+} { send_user "\nnumber\n"} } 

结果:

 spawn bash echo 10 zero 

我不知道我做错了什么,我没有find任何帮助谷歌。 我也search了类似的问题在这里解决,我不能使任何工作在我的代码。

更新

我尝试了build议的修复代码:

 #!/usr/bin/expect -f set timeout 3 spawn bash send "echo 0\n" expect { -regexp {\b0\b} { send_user "\nzero\n" } -re {\d+} { send_user "\nnumber\n"} } send "exit\n" 

但是我仍然有这样的回应:

 spawn bash echo 0 number 

更新2

我也试过这一行:

  -regexp {"^0\n$"} { send_user "\nzero\n" } 

但是我仍然有相同的结果。

提前致谢

我可以解决这个问题:

 #!/usr/bin/expect -f set timeout 3 spawn bash send "echo 0\n" expect -re "(\\d+)" { set result $expect_out(1,string) } if { $result == 0 } { send_user "\nzero\n"; } else { send_user "\nnumber\n"; } send "exit\n" 

尝试使用单词边界: \b0\b

快速浏览期望的文档:

但是,由于期望值不是面向行的,所以这些字符匹配当前在期望匹配缓冲区中的数据的开始和结束(而不是行)。

你的正则表达式应该考虑到你有换行符的事实。

如果你的数据是0\n ,那么你可以使用"^0\n$"