0

我很难弄清楚这个 XSD 正则表达式匹配。这是 simpleType 定义:

  <xs:simpleType name="data-fuelcorrfact">
    <xs:restriction base="xs:float">
      <xs:pattern value="\-?[1-9]\.[0-9]{4}"/>
    </xs:restriction>
  </xs:simpleType>

我可以猜测它需要一个介于 1 和 9 之间的数字、一个句点和另一个介于 0 和 9 之间的数字。我不明白它\-?是什么,并且例如将值 1.0 验证失败。

有人可以帮我破译这个正则表达式吗?此外,是否有人对可以解释给定 XSD 正则表达式值应包含的程序或网站有任何参考?谢谢!

4

4 回答 4

4

我不熟悉 XSD,但假设它使用通常的 RegEx 规则,以下是细分:

首先,\-?。这匹配一个或零个破折号,即是否为负。The\只是一个转义字符,即将 the-视为一个实际-字符,而不是一个特殊的 RegEx 字符。但是,在方括号之外,它通常没有任何特殊含义。可能是 XSD 的事情。

接下来,[1-9]匹配任何非零数字字符(即 1、2、3、4、5、6、7、8 或 9)。所以是个位数。

\.事实上,确实匹配一个句点。

然后我们得到[0-9]{4}了完全匹配的 4 个数字字符(现在包括零)。

所以它正在寻找 (-10, 10) 中的任何数字,而不是 (-1, 1) 中恰好有四位小数的数字。奇怪的行为; 我怀疑[1-9]应该是[01-9]因为这样省略 0 左右的值非常奇怪。

于 2012-08-01T19:29:54.957 回答
3

你很接近。The\-?是一个可选的减号,由 . 转义\。我对 XSD 不是很熟悉,所以我不能确定是否真的需要转义。'1.0'验证失败,因为正则表达式需要 4 位小数——这{4}[0-9]{4}. '1.000'应该匹配。

于 2012-08-01T19:28:53.770 回答
1

-转义\- 我不相信这实际上是需要的,可能有人试图保证安全(如果转义字符不是特殊的,它将按原样输出)。

后面跟?零或一的意思。

所以,一开始是可选-的。

1.0由于[0-9]{4}后面的原因验证失败.- 这需要四个小数点,其中1.0只有一个。

有关XSD 正则表达式参考,请参见此处。

于 2012-08-01T19:29:20.823 回答
0

实际上,与几乎所有其他正则表达式方言不同,XSD 规范不允许使用反斜杠转义连字符。您的 XML Schema 处理器似乎在接受的内容上过于自由。

于 2012-08-01T22:37:05.857 回答