Причиной сбоя вашего шаблона является то, что при использовании Классы символов или Наборы символов ([ ]
) вы указываете, что любой из перечисленных символов является приемлемым, а не тем, что вы хотите.
Вы правы в отношении прямой косой черты: это не особый метасимвол регулярного выражения в любой разновидности регулярного выражения, просто иногда он используется как разделитель регулярных выражений в разновидностях, которые допускают регулярное выражение литеральных нотаций (например,/^abc$/
).
Итак, все, что вам нужно использовать, это
<xs:pattern value="X|X/R|X/L"/>
или менее многословно с [RL]
(класс символов соответствует R
или L
) вместоповторения двух последних значений:
<xs:pattern value="X|X/[RL]"/>
Или даже
<xs:pattern value="X(/[RL])?"/>
Здесь X
сопоставляется, затем /R
или /L
сопоставляются 1 или 0 раз,т. е. по желанию.
XSD-шаблоны всегда привязываются по умолчанию (= должно соответствовать всей строке), поэтому не следует добавлять ^
или $
в начале / конце.
Вот полный пример поддержки XSD:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" >
<xsd:element name="r">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:pattern value="X|X/R|X/L"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
</xsd:schema>