我想检查该行是否为键值格式,所以我这样做:
set index [string first "=" $line]
if { $index == -1 } {
#error
}
set text [string range $line [expr $index + 1] end]
if { [string first "=" $text ] != -1 } {
#error
}
如何将此支票作为正则表达式编写?
答案 0 :(得分:4)
您还可以使用=
作为分隔符拆分字符串,并检查结果字段的数量
set fields [split $line =]
switch [llength $fields] {
1 {error "no = sign"}
2 {lassign $fields key value}
default {error "too many = signs"}
}
答案 1 :(得分:2)
您的代码对于上一个if
语句有点混乱。
通过正则表达式,您可以使用:
% regexp {=(.*)$} $line - text
1 # If there's no "=", it will be zero and nothing will be stored in $text,
# as $text will not exist
在if
块中,您可以使用:
if {[regexp {=(.*)$} $line - text]} {
puts $text
} else {
# error
}
编辑:检查字符串是否只包含一个=
符号:
if {[regexp {^[^=]*=[^=]*$} $line]} {
return 1
} else {
return 0
}
^
表示字符串的开头
[^=]
表示除等号外的任何字符
[^=]*
表示除了等号出现0次或更多次以外的任何字符
=
仅匹配一个等号
$
匹配字符串的结尾。
因此,它检查字符串是否只有一个等号。
1
表示该行只包含1个等号,0
表示没有等号,或者多于1个等号。