5

私は TCL GUI に取り組んでおり、XML スキーマから GUI のデータ ツリー構造を取得しています。また、XML スキーマのように制限からエントリ フィールドを検証する必要があります。私が使用している XML スキーマには、それぞれパターン制限 ' \c+' 、' \i\c*' および ' [\i-[:]][\c-[:]]*' を持つ単純なタイプ NMTOKEN Name および NCName があります。私がチェックするために使用するコードは

method validatePatternValue { value } { 
    set patternCheck 1

    set pattern "^($patternValue)\$"
    set patternCheck [regexp $pattern $value]

    if {$patternCheck == 0} {
        tk_messageBox -message "Only Characters within range $patternValue for $patternValueType is\
                                accepted "
        return 0
    } 

    return 1
}

$pattern がこれらの ' \c+' 、 ' \i\c*' および ' [\i-[:]][\c-[:]]*' のいずれかである場合は常に、テキスト フィールドは入力を受け入れず、エラー例外ダイアログをスローし続けます。

\iもう少し情報を追加するために、「 」と「 」の組み合わせの処理に関する私の質問に関するいくつかの良い情報があるこの Web サイトに出くわしました\c。しかし、次のリンクで提案されている方法以外に方法はありません: XML Schema Character Classes

4

1 に答える 1

5

エスケープ シーケンスは、\cXML スキーマ正規表現で行うことを Tcl 正規表現では行いません。

XML スキーマ内

\cXML 名の最初の文字の後に出現する任意の文字に一致します。つまり、[-._:A-Za-z0-9]

Tcl で

\cX(X は任意の文字) 下位 5 ビットが X と同じで、残りのビットがすべて 0 の文字

あなたが送ったリンクにも明確に記載されています

\c 短縮構文は、他の多くの正規表現で使用される制御文字構文と競合することに注意してください。

[-.:\w]代わりに使用してみてください\c

同じことが にも当てはまりますが\i、Tcl と XML では同じではありません。

于 2012-10-09T07:58:55.283 に答える