I have a XML Schema with a regex restriction that matches three different options and looks similar to this:
somestring|someotherstring|
My problem is that xmllint does not like this regex. It gives the following error:
regexp error : failed to compile: expecting a branch after |
I am forced to comply with xmllint because of the environment.
My question is, what are other options to match empty string using regex in a XSD?
As I understand, negative look ahead is not available in a XSD regex, and I am at a loss for other options.
You may use an optional group:
(somestring|someotherstring)?
^ ^^
It will match these 2 words or an empty string. In XSD, all patterns are anchored automatically, so, no additional operators are necessary.
See what the regex matches.
I think Wiktor's answer is fine (+1), but you asked for more answers, so here are some alternatives:
Works with Xerces-J but not xmllint:
|somestring|someotherstring
somestring||someotherstring
somestring|someotherstring|
Works with Xerces-J and xmllint:
(somestring|someotherstring)? <!-- Wiktor's answer -->
()|somestring|someotherstring
somestring|()|someotherstring
somestring|someotherstring|()
Works with Xerces-J and xmllint:
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value=""/>
<xs:enumeration value="somestring"/>
<xs:enumeration value="someotherstring"/>
</xs:restriction>
</xs:simpleType>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With