我很难搞清楚这个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正则表达式值应该包括?谢谢!
答案 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处理器似乎过于宽松了。