如何处理正则表达式的不同方言(java与xsd)?

时间:2010-01-30 16:13:34

标签: java regex xsd

当我尝试在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投票赞成

2 个答案:

答案 0 :(得分:3)

由于已经提交了错误,我建议您尝试使用其他XML Schema处理器。你可以做很多事情。

如果您可以预先处理XSD的流,那么您可以创建一个解析器,该解析器了解基本的正则表达式结构,并且可以修复任何看起来形式为[。* - ]的内容(其中.star不是在这种情况下的文字)。

答案 1 :(得分:0)

虽然它可能不是世界上最好的解决方案,但您可以考虑使用Sax解析器。我已经使用它超过3年了,但是我没有对它进行过多的正则表达式验证,所以我不能说它与之相关的稳健性。

除此之外,我认为Kaleb在预处理方面可能是正确的(这不是理想的) - 您可以使用正则表达式来为任何传入的正则表达式做替换....虽然这有很多代码味道。

修改 一个额外的想法刚刚来到我身边。如果正则表达式不需要在xsd中 - 即它只是因为它在过去是“最简单的” - 你可以在xsd之外进行正则表达式验证。但是,如果其他系统使用xsd,这可能不是正确的解决方案,你可以忘记我说了什么。