我有一个带有正则表达式限制的XML Schema,它匹配三个不同的选项,看起来与此类似:
somestring|someotherstring|
我的问题是xmllint不喜欢这个正则表达式。它出现以下错误:
regexp错误:编译失败:在|
之后期待分支
由于环境原因,我不得不遵守xmllint。
我的问题是,在XSD中使用正则表达式匹配空字符串的其他选项是什么?
根据我的理解,XSD正则表达式中没有负向前瞻,我对其他选项感到茫然。
答案 0 :(得分:3)
您可以使用可选组:
(somestring|someotherstring)?
^ ^^
它将匹配这两个单词或一个空字符串。在XSD中,所有模式都自动锚定,因此不需要额外的操作符。
答案 1 :(得分:1)
我认为Wiktor的答案很好(+1),但你要求更多的答案,所以这里有一些选择:
适用于Xerces-J ,但不适用于 xmllint:
|somestring|someotherstring
somestring||someotherstring
somestring|someotherstring|
适用于Xerces-J 和 xmllint:
(somestring|someotherstring)? <!-- Wiktor's answer -->
()|somestring|someotherstring
somestring|()|someotherstring
somestring|someotherstring|()
适用于Xerces-J 和 xmllint:
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value=""/>
<xs:enumeration value="somestring"/>
<xs:enumeration value="someotherstring"/>
</xs:restriction>
</xs:simpleType>