0

行がキーと値の形式であるかどうかを確認したいので、次のようにします。

        set index [string first "=" $line]

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

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

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

このチェックを正規表現として記述するにはどうすればよいですか?

4

2 に答える 2

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
}

編集:=文字列に記号が1つしか含まれていないかどうかを確認するには:

if {[regexp {^[^=]*=[^=]*$} $line]} {
    return 1
} else {
    return 0
}

^文字列の始まりを意味します。
[^=]等号以外の任意の文字を意味します。
[^=]*0 回以上発生する等号以外の任意の文字を意味します。
=1 つの等号のみに一致します。
$文字列の末尾に一致します。

そのため、文字列に等号が 1 つしかないかどうかをチェックします。

1は、行に等号が 1 つしか含まれてい0ないこと、等号がないこと、または複数の等号がないことを意味します。

于 2013-05-29T10:53:57.857 に答える