对'\ c +','\ i\c*'和'[\ i - [:]] [\ c - [:]]*'评估'regexp'的问题

NAN*_*PAL 5 regex validation user-interface xsd tcl

我正在开发一个TCL GUI,我从XML Schema获取GUI的数据树结构,我必须像XML Schema一样验证限制的输入字段.在我使用的XML Schema中,我有简单类型NMTOKEN Name和NCName,分别带有模式限制' \c+',' \i\c*'和' [\i-[:]][\c-[:]]*'.我用来检查的代码是

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
}
Run Code Online (Sandbox Code Playgroud)

每当$ pattern是其中之一' \c+',' \i\c*'和' [\i-[:]][\c-[:]]*'我的文本字段不接受任何输入并继续抛出错误异常对话框.

只是为了添加更多信息,我偶然发现了这个网站,并提供了一些有关处理' \i'和' \c' 组合的问题的一些信息.但除了以下链接中建议的方法之外,没有其他方法:XML Schema Character Classes

Nir*_*evy 5

\c转义序列不使用Tcl正则表达式是什么它在XML的模式正则表达式做.

在XML Schema中

\c 匹配XML名称中第一个字符后可能出现的任何字符,即 [-._:A-Za-z0-9]

在Tcl

\cX (其中X是任何字符)低位5位与X相同的字符,其他位全部为零

您发送的链接中也明确说明了这一点

请注意,\ c简写语法与许多其他正则表达式中使用的控制字符语法冲突.

你应该尝试使用[-.:\w]而不是\c

同样的情况也是如此\i,它在Tcl和XML中没有做同样的事情

  • @Nir Levy 是的,我在 lreplace、lindex、regsub 和永无休止的转换和替换列表方面做了很多工作。XML 模式是一项艰巨的工作!正如你所建议的,我最终在 \c 出现的地方用 [-._:A-Za-z0-9] 代替 \c ,目前似乎可以完成这项工作 (2认同)