XML Schema正则表达式空字符串

时间:2016-07-07 17:42:23

标签: regex xml xsd xmllint

我有一个带有正则表达式限制的XML Schema,它匹配三个不同的选项,看起来与此类似:

somestring|someotherstring|
  1. 某些字符串,或
  2. 其他一些字符串,或
  3. 空字符串
  4. 我的问题是xmllint不喜欢这个正则表达式。它出现以下错误:

      

    regexp错误:编译失败:在|

    之后期待分支

    由于环境原因,我不得不遵守xmllint。

    我的问题是,在XSD中使用正则表达式匹配空字符串的其他选项是什么?

    根据我的理解,XSD正则表达式中没有负向前瞻,我对其他选项感到茫然。

2 个答案:

答案 0 :(得分:3)

您可以使用可选组:

(somestring|someotherstring)?
^                          ^^ 

它将匹配这两个单词或一个空字符串。在XSD中,所有模式都自动锚定,因此不需要额外的操作符。

查看regex matches

答案 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>