杨模式不接受包含 ^ 和 $ 的正则表达式

Yang pattern not accepting regex containing ^ and $

Yang 模式在包含脱字符 ^ 或美元 $ 时不接受有效的正则表达式。

波纹管模式在 Regex 验证器上有效,但是当 运行 在 is-types.yang 文件中的 Yang 模式模板内时,我的应用程序出错。

然而,当我从表达式的每个部分中去掉 ^ 和 $ 时,它工作正常。但是,这现在允许正则表达式接受不需要的值。

我正在尝试匹配 1、11、1/1/1、1/1/1/1。

尝试模式:

^([0-9]{1,3}/[0-9]{1,3}/[0-9]{1,3})$|^([0-9]{1,3}/[0-9]{1,3}/[0-9]{1,3}/[0-9]{1,3})$|^([0-9]{1,2})$

杨类型定义:

typedef interface_number_value {
    type string {
        pattern "([0-9]{1,3}/[0-9]{1,3}/[0-9]{1,3})|([0-9]{1,3}/[0-9]{1,3}/[0-9]{1,3}/[0-9]{1,3})|([0-9]{1,2})" {
            error-message "error";
        }
    } 
    description
        "description";
}

我也不知道在哪里可以和杨一起issues/bugs。

这是 RFC7950 关于“模式”声明的说法:

The "pattern" statement, which is an optional substatement to the "type" statement, takes as an argument a regular expression string, as defined in [XSD-TYPES]. It is used to restrict the built-in type "string", or types derived from "string", to values that match the pattern.

如果您遵循规范参考 XSD-TYPES,您最终会:

[XSD-TYPES] Biron, P. and A. Malhotra, "XML Schema Part 2: Datatypes Second Edition", World Wide Web Consortium Recommendation REC-xmlschema-2-20041028, October 2004, http://www.w3.org/TR/2004/REC-xmlschema-2-20041028.

因此 YANG“模式”语句中的正则表达式由 XML 架构 (XSD) 类型规范定义(以及针对 YANG 1.0 和 1.1 的特定修订版)。

与其他一些正则表达式风格不同,YANG“模式”开头的 ^ 字符或 YANG“模式”结尾的 $ 字符不会被解释为锚点。相反,它们按字面解释为必须匹配的字符。所有“模式”表达式都是隐式锚定的,因此匹配整个值。

您可以了解更多关于 XML 架构正则表达式 here 的细节。