XSD正则表达式真正等同于什么?

时间:2012-08-01 19:25:56

标签: xml regex xsd

我很难搞清楚这个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 个答案:

答案 0 :(得分:4)

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

首先,\-?。匹配一个或零个破折号,即否定符号。 \只是一个转义字符,即将-视为实际的-字符,而不是特殊的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左右的值是非常奇怪的。

答案 1 :(得分:3)

你很亲密。 \-?是可选的减号,由\转义。我对XSD并不十分熟悉,所以我无法确定是否真的有必要进行转义。 '1.0'验证失败,因为正则表达式正好需要4位小数 - 这是{4}的{​​{1}}部分。 [0-9]{4}应匹配。

答案 2 :(得分:1)

-正在使用\进行转义 - 我不相信这实际上是需要的,可能有人试图保证安全(如果转义字符不特殊,则会输出原样)。

后面跟?表示零或一。

所以,在开始时选择-

由于1.0之后的[0-9]{4}

.验证失败 - 这需要四个小数点,其中1.0只有一个。

有关XSD正则表达式参考,请参阅here

答案 3 :(得分:0)

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