tcl期望正则表达式不工作?

tcl期望正则表达式不工作?,tcl,expect,Tcl,Expect,我试图期望使用不同类型的网络设备,但我无法让更复杂的正则表达式工作 对于Cisco设备,我有: expect {"*>"} 这个*很好用 但对于Fortinet设备,我想这样做 expect {"^[a-zA-Z0-9_.-\s]+[#]"} 但它不起作用。我检查了一个正则表达式“checker”,以确保表达式是正确的,并且似乎有效。所以基本上,我想筛选以“NAME_OF_DEVICE#”开头的行,因为这就是您第一次连接到Fortinet shell时的情况 知道它为什么不起作用吗?来

我试图期望使用不同类型的网络设备,但我无法让更复杂的正则表达式工作

对于Cisco设备,我有:

expect {"*>"}
这个*很好用

但对于Fortinet设备,我想这样做

expect {"^[a-zA-Z0-9_.-\s]+[#]"}
但它不起作用。我检查了一个正则表达式“checker”,以确保表达式是正确的,并且似乎有效。所以基本上,我想筛选以“NAME_OF_DEVICE#”开头的行,因为这就是您第一次连接到Fortinet shell时的情况

知道它为什么不起作用吗?

来自:“Regexp样式的模式遵循Tcl的Regexp(正则表达式的缩写)命令定义的语法。Regexp模式使用-re标志引入。”

你的例子是:


<代码> Re[AZ-ZO-9}--[s] +y}…< /代码> /p>因为在字符类的中间使用一个破折号定义字符范围,我另外建议在你的模式的开头或结尾(如果你想真正匹配一个破折号的话),例如:代码> {^ [-AZ-Z09]。。也许我遗漏了一些东西,但现在我的Cisco和Fortinet expect都无法工作。在您的示例中,您重复引用了您的表达式。也许那会把你绊倒。你应该使用:

expect-re{[a-zA-Z0-9.-\s]+}
(注意:没有引号),或者如果你真的想使用引号,
expect{-re}[a-zA-Z0-9.-\s]+}
(-re在大括号内)。你的Cisco表达式不是有效的regexp,因此不要在那里使用-re开关。提示:在开发expect脚本时,在脚本顶部附近添加
exp\u internal 1