‘;无效的裸字“;regexp"’;在Tcl脚本中
上面的代码在tcl中生成无效的裸字“regexp”错误‘;无效的裸字“;regexp"’;在Tcl脚本中,regex,tcl,bareword,Regex,Tcl,Bareword,上面的代码在tcl中生成无效的裸字“regexp”错误 我想知道单词中的错误是什么,tcl中的无效单词是什么。如何调试。它不是来自正则表达式。这是一个Tcl语法问题。你应该写: 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]
我想知道单词中的错误是什么,tcl中的无效单词是什么。如何调试。它不是来自正则表达式。这是一个Tcl语法问题。你应该写:
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
在if
的第一个参数内被写为非限定字符串。如果要将命令的结果作为条件参数中的操作数,需要在其周围加上括号:[regexp…]
但是不应该使用正则表达式来验证IP号码。虚线十进制只是编写IP号码的多种可能方法之一,尝试用正则表达式对它们进行排序将是一件痛苦且容易出错的事情
改用ip
模块。我不是知识产权专家,但以下几点应该有效:
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"
}
会议文件
文档:,正则表达式是正确的。请检查
\.+
上的其他内容应为\.
。它将匹配225…..255.0
其他内容
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"
}
}