tcl中的正则表达式

时间:2015-12-15 11:02:42

标签: regex tcl

tcl中,我将此作为: -

set promptInfo [oBOTANDROID2 launchVapiEiCmd getinfo]

并将输出作为" -

VAPIEI Cmd Rcvd: {state inservice} {type dmc} {description {BOTSP2,10.77.41.154,tcp;(dmc)}} {lines 2} {calls 2} {streams 4} {{primary cm} 10.77.41.11} {{backup cm} } {status {}} {id dmc2} {userid } {{last error} {}} {{delay offer} false} {{Voice Mail client status} {inactive}} {{primary cti} {}} {{backup cti} {}} {{current cti} {}} {{preferred mode} {voip}} {{call type} {voip}} {{domain} {}} {{ixenabled} {no}} {{esrstvernego} {null}} {{ipv4address} {10.77.41.154}} {{ipv6address} {}} {{deploymentmodel} {on-premise}} {{login type} {uc-directory}} {centraluds {}} {{sip port} {42708}} {privacy disabled}

在这里,我需要比较两个ipBOTSP2之间的ipv4address和{{1}}之后的其他{{1}},两者都应该相同。

如何提取两个IP地址?

2 个答案:

答案 0 :(得分:1)

您可以使用以下代码:

set a {VAPIEI Cmd Rcvd: {state inservice} {type dmc} {description {BOTSP2,10.77.41.154,tcp;(dmc)}} {lines 2} {calls 2} {streams 4} {{primary cm} 10.77.41.11} {{backup cm} } {status {}} {id dmc2} {userid } {{last error} {}} {{delay offer} false} {{Voice Mail client status} {inactive}} {{primary cti} {}} {{backup cti} {}} {{current cti} {}} {{preferred mode} {voip}} {{call type} {voip}} {{domain} {}} {{ixenabled} {no}} {{esrstvernego} {null}} {{ipv4address} {10.77.41.154}} {{ipv6address} {}} {{deploymentmodel} {on-premise}} {{login type} {uc-directory}} {centraluds {}} {{sip port} {42708}} {privacy disabled}}
regexp {BOTSP2,([\d.]+).*\{ipv4address\}\s*\{([\d.]+)} $a m ip1 ip2
 if {$ip1 eq $ip2} {
   puts "Equal!"
 } 

请参阅IDEONE demo

正则表达式BOTSP2,([\d.]+).*\{ipv4address\}\s*\{([\d.]+)将与BOTSP2,匹配,然后将一个或多个数字和点(= ip1)捕获到第1组中,然后它会找到{ipv4address} +空格+ {然后将一个或多个数字和点捕获到第2组(ip2)。

您可以稍后检查字符串是否相等。

答案 1 :(得分:0)

您获得的输出可以很好地解释为Tcl列表,因此您可以使用lsearch

% lsearch -regexp -inline $promptInfo "BOTSP2"
description {BOTSP2,10.77.41.154,tcp;(dmc)}
% lsearch -regexp -inline $promptInfo "ipv4address"
{ipv4address} {10.77.41.154}

可以使用lindex清除第一个结果并进行拆分,而使用单个lindex清除第二个结果。如果你想把IP放在一行:

% lindex [split [lindex [lsearch -regexp -inline $promptInfo "BOTSP2"] 1] ,] 1
10.77.41.154
% lindex [lsearch -regexp -inline $promptInfo "ipv4address"] 1
10.77.41.154

之后你可以比较它们。