我有一个字符串如下:
o=India-SIPUA 6264 0 IN IP4 10.77.33.200
现在我需要编写一个代码来检查字符串“o=India-SIPUA
”以及字符串10.77.33.200
是否存在于上面的字符串中。
我写了以下代码:
[regexp {.*o=India-SIPUA.*10.77.34.200} $buf match],
但它不起作用
我需要从一大块代码中搜索那些2。我正在写下面的一个
set buffer "v=0
o=India-SIPUA 6264 0 IN IP4 10.77.33.200
s=SIP Call"
set patt "o=India-SIPUA"
set ipaddress "10.77.34.200"
#set port ""
foreach buf [split $buffer "\n"] {
if {[regexp {.*o=$patt.*$ipaddress} $buf match]} {
puts "+++++++Port==$match++++++"
return 1
} else {
puts "Problem in getting port.."
return 0
}
}
但它总是会转向其他部分而永远不会进入if部分。
那么你能说出了什么问题吗?
答案 0 :(得分:1)
您不需要正则表达式匹配:
set a o=India-SIPUA
set b 10.77.33.200
if { [string first $a $buff] != -1 && [string first $b $buff] != -1 } {
puts match
}
答案 1 :(得分:1)
你的代码的问题是在大括号内执行而不是的替换,所以你必须使用引号并双重转义正则表达式中的任何转义:
@\[.*\]
set buffer "v=0
o=India-SIPUA 6264 0 IN IP4 10.77.33.200
s=SIP Call"
set patt "India-SIPUA"
# Here we have to raw the string and I changed your pattern
set ipaddress [string map {. \\.} "10.77.33.200"]
foreach buf [split $buffer "\n"] {
if {[regexp "o=$patt.*\\y$ipaddress\\y" $buf match]} {
puts "+++++++Port==$match++++++"
} else {
puts "Problem in getting port.."
}
}
输出:
stdout
答案 2 :(得分:0)
使用以下正则表达式:
.*?o=India-SIPUA .*?10\.77\.33\.200.*
。*?匹配任何字符(换行符除外) 量词:*?在零和无限次之间,尽可能少的时间,根据需要扩展[懒惰]
答案 3 :(得分:0)
您应该检查您指定的值:字符串中有10.77.33.200
,正则表达式中有10.77.34.200
。另外,请注意.
:要匹配文字点,您需要将其转义。
这是一个找到两个值的工作代码:
set buff "SOME TEXT o=India-SIPUA 6264 0 IN IP4 10.77.33.200"
regexp {.*o=India-SIPUA.*10\.77\.33\.200} $buff match
puts $match
请参阅demo
修改强>:
要匹配IP的第3组中的任意2位数,您可以使用\d{2}
(see demo):
set buff "SOME TEXT o=India-SIPUA 6264 0 IN IP4 10.77.33.200"
regexp {.*o=India-SIPUA.*(10\.77\.\d{2}\.200)} $buff match ip
puts $match
puts $ip
输出:
SOME TEXT o=India-SIPUA 6264 0 IN IP4 10.77.33.200
10.77.33.200