Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex TCL正则表达式问题-查找路由器父接口_Regex_Networking_Tcl_Expect - Fatal编程技术网

Regex TCL正则表达式问题-查找路由器父接口

Regex TCL正则表达式问题-查找路由器父接口,regex,networking,tcl,expect,Regex,Networking,Tcl,Expect,我正在做一些Expect/TCL脚本来从路由器获取重要信息 我的目标之一是使用我登录到路由器的IP作为参考,获取路由器的WAN接口的名称 路由器IP示例:66.66.66.66-包含在变量$rtrname中 使用expect,我使用以下表达式计算以下数据($expect_out(buffer)),并将其输出到值$wan 表达方式: regexp (.*?)(?=(?:\..*?)?\s{2,}$rtrname) $expect_out(buffer) wan $expect\u out(缓冲区

我正在做一些Expect/TCL脚本来从路由器获取重要信息

我的目标之一是使用我登录到路由器的IP作为参考,获取路由器的WAN接口的名称

路由器IP示例:66.66.66.66-包含在变量$rtrname中

使用expect,我使用以下表达式计算以下数据($expect_out(buffer)),并将其输出到值$wan

表达方式:

regexp (.*?)(?=(?:\..*?)?\s{2,}$rtrname) $expect_out(buffer) wan
$expect\u out(缓冲区):

如果$rtrname==66.66.66.66,则将$wan正确返回为GigabitEthernet0/0,这就是我想要的

不幸的是,它不能正常工作,输出如下:

Router2#sh ip int brief
Interface               IP Address          Status      Protocol
eth 0/1                192.168.1.1            UP          UP         
eth 0/2                77.77.77.77       UP          UP         
fr 1.501               55.55.55.55       UP          UP         
fr 1.502               66.66.66.66       UP          UP     
这导致$wan返回为空,而我期望的是'fr 1'

我使用了一些不同的正则表达式工具,这个表达式似乎通过了。只是当我把它放在代码中时,它不会。我错过了什么


PS-我是一名网络工程师,不是一名专业的编码员,所以请对我放松点!:)

你确定你得到的是
千兆以太网0/0
?因为正则表达式是错误的,应该是:

regexp -line -- ^(.*?)(?=(?:\\..*?)?\\s{2,}$rtrname) $expect_out(buffer) wan
                            ^       ^
-line
标志用于使
^
匹配一行的开头,而不是整个字符串

由于没有将表达式用大括号括起来,因此必须加倍避开反斜杠


正则表达式在其他输出上也适用于我。

你确定你得到的是
GigabitEthernet0/0
?因为正则表达式是错误的,应该是:

regexp -line -- ^(.*?)(?=(?:\\..*?)?\\s{2,}$rtrname) $expect_out(buffer) wan
                            ^       ^
-line
标志用于使
^
匹配一行的开头,而不是整个字符串

由于没有将表达式用大括号括起来,因此必须加倍避开反斜杠


regex在其他输出上也适用于我。

Jerry,谢谢你看这个。我确实似乎赶上了吉比特以太网0/0之前的回车;我会试试你的建议,看看它是否解决了我的问题。好的:)哦,还有一件事,你也可以在
*?
周围放上括号,因为你根本不访问捕获的部分。明白了!它正在工作。它在fr 1之前占据了空间(这似乎没有进入我上面的示例),但是路由器并不关心,因此,我也不关心:)@Eleck Haha,我很高兴:)Jerry,谢谢你看这个。我确实似乎赶上了吉比特以太网0/0之前的回车;我会试试你的建议,看看它是否解决了我的问题。好的:)哦,还有一件事,你也可以在
*?
周围放上括号,因为你根本不访问捕获的部分。明白了!它正在工作。它在fr 1之前占据了空间(这似乎没有进入我上面的示例),但路由器并不在意,因此,我也不在乎:)@Eleck Haha,我很高兴:)