匹配set中的非重复单词与分隔符

时间:2016-01-05 15:01:52

标签: regex xsd

我试图编写一个正则表达式来匹配由垂直线分隔的一组单词,这些单词应该只在字符串中出现一次。 E.g。

mode1|mode2|mode3

但它不符合:

mode1|mode2|mode2
mode1|
mode1|mode1
mode1|any_other_word

到目前为止,我已写过

^(?:(mode1|mode2|mode3)\|?)*(?!(?:mode1|mode2|mode3)\1)$

我相信它足够接近理想的结果。但我不能使正则表达式与之前发生的单词不匹配,例如:

mode1|mode2|mode3|mode2

1 个答案:

答案 0 :(得分:2)

由于您正在使用XSD,因此您应该使用枚举而不是正则表达式来描述预期值:

<xs:simpleType name="modeString">
  <xs:restriction base="xs:string">
    <xs:enumeration value="mode1"/>
    <xs:enumeration value="mode2"/>
    <xs:enumeration value="mode3"/>
  </xs:restriction>
</xs:simpleType>
     

改编自   w3schools.com

(编辑删除我的低级正则表达式答案并专注于使用xsd枚举)。