当我尝试在java(see this example)中针对XSD验证XML文件时,XSD文件中给出的正则表达式与java中的正则表达式之间存在一些不兼容性。
如果XSD中有正则表达式"[ab-]"
(表示任何字符“a”,“b”或“ - ”,则java会抱怨表达式中存在语法错误。
这是自2005年3月28日以来的已知错误,请参阅Sun bug database。
我可以做些什么来解决此错误?到目前为止,我尝试通过"[ab-]"
替换"[ab\-]"
来“纠正”XSD文件,但有时候这样做不是一种选择。
如果您对此错误也有疑问,请在Sun bug database投票赞成
答案 0 :(得分:3)
由于已经提交了错误,我建议您尝试使用其他XML Schema处理器。你可以做很多事情。
如果您可以预先处理XSD的流,那么您可以创建一个解析器,该解析器了解基本的正则表达式结构,并且可以修复任何看起来形式为[。* - ]的内容(其中.star不是在这种情况下的文字)。
答案 1 :(得分:0)
虽然它可能不是世界上最好的解决方案,但您可以考虑使用Sax解析器。我已经使用它超过3年了,但是我没有对它进行过多的正则表达式验证,所以我不能说它与之相关的稳健性。
除此之外,我认为Kaleb在预处理方面可能是正确的(这不是理想的) - 您可以使用正则表达式来为任何传入的正则表达式做替换....虽然这有很多代码味道。
修改强> 一个额外的想法刚刚来到我身边。如果正则表达式不需要在xsd中 - 即它只是因为它在过去是“最简单的” - 你可以在xsd之外进行正则表达式验证。但是,如果其他系统使用xsd,这可能不是正确的解决方案,你可以忘记我说了什么。