【问题标题】:XSD 1.0 regex to not match two specific hexadecimal stringsXSD 1.0 正则表达式不匹配两个特定的十六进制字符串
【发布时间】:2018-05-01 16:52:18
【问题描述】:

我一直在尝试在 XML 模式中提出一个正则表达式来匹配 000001-FFFFFE 范围内的十六进制字符串。我可以让000000FFFFFF 不匹配,但不能同时在一个表达式中。

应该匹配的字符串: EFEFEFEEEEEFFFFFFE10101010000000001

不应匹配的字符串: 000000, FFFFFF

有人有什么想法吗?这几天我一直在用键盘敲打我的头。

简而言之,所有 6 位十六进制值除了000000FFFFFF 都应该被允许。

【问题讨论】:

  • 不,严格的 6 位数字。我知道基本的正则表达式,但 XSD 变体有一些让我失望的限制。
  • 是的,我的测试环境有点..慢。我兴奋地编辑了,但最后一次构建失败了。哎呀。
  • 您找到下面的updated answer 为您工作了吗?
  • 我相信确实如此,但我们使用 XSD 进行验证的实现比我最初想象的要复杂一些。事实证明,我们暂时无法处理多个模式输入。感谢您的帮助,我将尝试更改我们的架构以允许这样做。

标签: regex xml xsd xsd-validation xml-validation


【解决方案1】:

以下 XSD,只需要 XSD 1.0,

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:simpleType name="OneHexDigitNot0">
    <xs:restriction base="xs:string">
      <xs:pattern            value="[1-9A-F][0-9A-F]{5}"/>
      <xs:pattern value="[0-9A-F]{1}[1-9A-F][0-9A-F]{4}"/>
      <xs:pattern value="[0-9A-F]{2}[1-9A-F][0-9A-F]{3}"/>
      <xs:pattern value="[0-9A-F]{3}[1-9A-F][0-9A-F]{2}"/>
      <xs:pattern value="[0-9A-F]{4}[1-9A-F][0-9A-F]{1}"/>
      <xs:pattern value="[0-9A-F]{5}[1-9A-F]"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="OneHexDigitNot0AndOneHexDigitNotF">
    <xs:restriction base="OneHexDigitNot0">
      <xs:pattern            value="[0-9A-E][0-9A-F]{5}"/>
      <xs:pattern value="[0-9A-F]{1}[0-9A-E][0-9A-F]{4}"/>
      <xs:pattern value="[0-9A-F]{2}[0-9A-E][0-9A-F]{3}"/>
      <xs:pattern value="[0-9A-F]{3}[0-9A-E][0-9A-F]{2}"/>
      <xs:pattern value="[0-9A-F]{4}[0-9A-E][0-9A-F]{1}"/>
      <xs:pattern value="[0-9A-F]{5}[0-9A-E]"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:element name="r" type="OneHexDigitNot0AndOneHexDigitNotF"/>
</xs:schema>

将根据要求成功验证具有 r 根元素和 6 位十六进制内容的 XML 文档,除了 000000 和 FFFFFF。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-28
    • 2017-02-27
    • 2016-12-30
    • 1970-01-01
    • 2016-12-03
    • 2014-10-08
    • 2013-11-26
    相关资源
    最近更新 更多