0

当 Yang 模式包含插入符号 ^ 或美元 $ 时,它不接受有效的正则表达式。

波纹管模式在正则表达式验证器上有效,但是当在 is-types.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";
}

我也不确定在哪里向杨提出问题/错误。

4

1 回答 1

1

这就是 RFC7950 关于“模式”声明的内容:

“pattern”语句是“type”语句的可选子语句,将正则表达式字符串作为参数,如 [XSD-TYPES] 中定义的那样。它用于将内置类型“string”或从“string”派生的类型限制为与模式匹配的值。

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

[XSD-TYPES] Biron, P. 和 A. Malhotra,“XML 模式第 2 部分:数据类型第二版”,万维网联盟建议 REC-xmlschema-2-20041028,2004 年 10 月, http://www.w3.org /TR/2004/REC-xmlschema-2-20041028

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

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

您可以在此处找到有关 XML 模式正则表达式的详细信息的更多信息。

于 2021-12-15T07:58:06.630 回答