我对XSD模式中的正则表达式有一个问题。lxml
说正则表达式是无效的,而我确信它应该有效。
<xs:element name="birth_date">
<xs:complexType>
<xs:sequence>
<xs:element name="valeur">
<xs:simpleType>
<xs:union>
<xs:simpleType>
<xs:restriction base="xs:date"></xs:restriction>
</xs:simpleType>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern
value="(?:(?:31(\/|-|\.)(?:0?[13578]|1[02]))\1|(?:(?:29|30)(\/|-|\.)(?:0?[1,3-9]|1[0-2])\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:29(\/|-|\.)0?2\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\d|2[0-8])(\/|-|\.)(?:(?:0?[1-9])|(?:1[0-2]))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})"></xs:pattern>
</xs:restriction>
</xs:simpleType>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="0"></xs:maxLength>
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
</xs:element>
<xs:element type="xs:string" name="backgroundcolor"/>
</xs:sequence>
</xs:complexType>
</xs:element>
我有这个错误:
The value '(?:(?:31(\/|-|\.)(?:0?[13578]|1[02]))\1|(?:(?:29|30)(\/|-|\.)(?:0?[1,3-9]|1[0-2])\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:29(\/|-|\.)0?2\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\d|2[0-8])(\/|-|\.)(?:(?:0?[1-9])|(?:1[0-2]))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})' of the facet 'pattern' is not a valid regular expression.
如果你能帮助我,我将不胜感激。
提前谢谢。
发布于 2017-10-25 20:37:06
XSD正则表达式不支持非捕获组(?:
)和反向引用(\1
、\2
等)。如果您删除这些构造,您的语法错误将被消除。
发布于 2017-10-26 00:11:37
在符合XSD规范的XSD模式中,pattern
的值必须是XSD规范为正则表达式定义的语言中的字符串。在许多细节上,该语言遵循Perl正则表达式,但由于在XSD中使用模式的方式,在语义和语法上存在一些差异。
\1
、\2
等形式的引用检索该子字符串。由于\
是XSD正则表达式中的元字符,并且\1
等没有定义为转义序列,因此字符串\1
不是合法的XSD正则表达式,任何包含它的字符串也不是。(从\9
.)
\2
到XSD正则表达式同样没有指示引擎记忆子字符串的工具,也没有区分应该记住匹配字符串的带括号表达式和不需要记住匹配字符串的表达式(捕获组和非捕获组)的实用程序。由于XSD是必须以正则表达式开头的元字符,并且(
不是合法正则表达式,也不是任何合法正则表达式的最后一个字符,除非进行转义(字符串'\(
‘是合法正则表达式),因此字符串(?
不是合法XSD正则表达式,也不能作为任何合法XSD正则表达式的子字符串出现,除非左括号前面有反斜杠。
XSD正则表达式确实具有捕获和非捕获组的指令,并且它们相应地扩展了XPath正则表达式语法。
您的正则表达式可能还有其他问题;首先想到的就是这些问题。
发布于 2017-10-25 20:38:40
我把这个模式放进去了,很有效,谢谢你们
<xs:pattern value="[0-3][0-9]-[01][0-9]-[0-9]{4}"></xs:pattern>
https://stackoverflow.com/questions/46931790
复制相似问题