tcl检查键值格式

时间:2013-05-29 10:48:50

标签: regex tcl

我想检查该行是否为键值格式,所以我这样做:

        set index [string first "=" $line]

        if { $index == -1 } {
            #error
        }

        set text  [string range $line [expr $index + 1] end]

        if { [string first "=" $text ] != -1 } {
            #error
        }

如何将此支票作为正则表达式编写?

2 个答案:

答案 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个等号。