【问题标题】:Regular expression failing to validate xml against xsd正则表达式无法针对 xsd 验证 xml
【发布时间】:2015-06-12 17:55:59
【问题描述】:

我正在尝试修复其他人多年前编写的 xsd 文件中的错误。问题是 xml 没有针对 xsd 进行验证。

错误信息返回如下:

"分面的值'0:0|-?\d{0,3}.*[0-9]+:-?\d{0,3}.*[0-9]+' 'pattern' 不是有效的正则表达式。”

“WXS 架构文件名.xsd 编译失败”

(我正在使用 xmllint 来验证)

我不擅长正则表达式,谁能解释一下这是做什么的?

0\:0|\-?\d{0,3}\.*[0-9]+\:\-?\d{0,3}\.*[0-9]+

如果我在每列 ':' 之前删除 '\' (反斜杠),它看起来像这样:

0:0|\-?\d{0,3}\.*[0-9]+:\-?\d{0,3}\.*[0-9]+

然后错误消失,架构编译并且 xml 验证。但是这些变化是什么,正则表达式是否仍然保持其最初的预期功能?

【问题讨论】:

    标签: regex validation


    【解决方案1】:

    两个正则表达式相同,冒号字符不需要反斜杠。

    这是一个直观的解释:

    这是:

    • 0:0

    • 0/1 减
    • 0/1/2/3 位
    • 0/1 点
    • 1+ 位
    • 1 个冒号
    • 0/1 减
    • 0/1/2/3 位
    • 0/1 点
    • 1+ 位

    【讨论】: