proc mulval { addr } {
if {regexp {^([2][2-3][0-9])\.+(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-])\.+(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])\.+(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])$} $addr } {
puts "Valid IP Multicast Address"
} else {
puts"Invalid IP multicast Address"
}
}
以上代码生成错误无效的赤字" regexp"在tcl。
我想知道这个词中的错误是什么,以及tcl中的无效裸字是什么。如何调试。
答案 0 :(得分:1)
它不是来自你的正则表达式。这是一个Tcl语法问题。你应该写:
if { [ regexp {^([2][2-3][0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])$} $addr ] } {
puts "Valid IP Multicast Address"
} else {
puts "Invalid IP multicast Address"
}
方括号表示必须将内容视为可执行命令。
答案 1 :(得分:1)
错误是regexp
被写为if
的第一个参数内的非限定字符串。如果要在condition参数中将命令的结果作为操作数,则需要在其周围放置括号:[regexp ...]
。
但是你不应该使用正则表达式来验证IP号码。虚线十进制只是编写IP编号的许多可能方法之一,并且尝试使用正则表达式对它们进行排序将会很痛苦且容易出错。
请改用ip
模块。我不是知识产权专家,但以下情况应该有效:
package require ip
proc mulval addr {
set mc [::ip::prefix 224/4]
if {[::ip::equal $mc [::ip::prefix $addr/4]]} {
puts "Valid IP Multicast Address"
} else {
puts "Invalid IP multicast Address"
}
}
的文档