【问题标题】:Yang pattern not accepting regex containing ^ and $杨模式不接受包含 ^ 和 $ 的正则表达式
【发布时间】:2022-01-17 21:34:12
【问题描述】:

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

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

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

【问题讨论】:

  • 这不是错误。 YANG 使用 XSD 风格的正则表达式,其中 ^ 和 $ 表示必须出现在匹配字符串中的文字。表达式总是隐式锚定的(整个值必须匹配),所以你所说的关于不需要的值是不可能的,除非你的 YANG 验证器实现是非标准的(因此不是 YANG 验证器)。
  • 既然您还询问 YANG 规范中的错误在哪里讨论,那就是 NETMOD WG 邮件列表 (ietf.org/mailman/listinfo/netmod)。如果您怀疑有问题,那将是去的地方。每个 IETF RFC 文档也有一个勘误页,您可以在其中检查问题是否已被报告 (rfc-editor.org/errata_search.php?rfc=7950&rec_status=0)。

标签: python regex ietf-netmod-yang yang ietf


【解决方案1】:

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

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

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

[XSD 类型] 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 Schema 正则表达式的细节here

【讨论】:

    猜你喜欢
    • 2019-11-02
    • 2021-07-13
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-08
    相关资源
    最近更新 更多