XML 架构正则表达式空字符串

XML Schema regex empty string

我有一个带有正则表达式限制的 XML 架构,它匹配三个不同的选项并且看起来类似于:

somestring|someotherstring|
  1. 一些字符串,或者
  2. 一些其他字符串,或
  3. 空字符串

我的问题是 xmllint 不喜欢这个正则表达式。它给出了以下错误:

regexp error : failed to compile: expecting a branch after |

因为环境原因,我被迫遵守xmllint。

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

据我了解,XSD 正则表达式中不提供负面展望,我对其他选项一筹莫展。

您可以使用可选组:

(somestring|someotherstring)?
^                          ^^ 

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

看看regex matches.

我认为 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>