You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用JAXB2 Maven插件生成Java类时正则表达式报错求助

解决JAXB2 Maven插件编译XSD时的正则表达式错误

这个问题很典型,根源在于XML Schema的正则表达式语法对字符类([])中的-有严格规则——如果-不是放在字符类的开头或结尾,就必须用反斜杠转义,否则会被解析成“字符范围”的分隔符(比如a-z表示从a到z的连续字符),而你的正则里[_a-zA-Z0-9-+]中间的-就触发了这个校验错误。

给你两个直接可行的解决方案:

方案1:转义字符类中的-

找到XSD里定义这个邮箱正则的<xs:pattern>元素,把字符类里的-转义成\-。注意在XML属性中,反斜杠不需要额外转义,直接写即可。修改后的正则示例:

<xs:pattern value="[_a-zA-Z0-9\-+]+(\.[_a-zA-Z0-9\-+]+)*@[a-zA-Z0-9\-]+(\.[a-zA-Z0-9\-]+)*(\.[a-zA-Z]{2,4})"/>

方案2:调整-在字符类中的位置

另一种更简洁的方式是把-移到字符类的开头或结尾,这样就不需要转义了。比如:

  • 移到开头:[-_a-zA-Z0-9+]+
  • 移到结尾:[_a-zA-Z0-9+-]+

修改后的完整正则可以写成:

<xs:pattern value="[-_a-zA-Z0-9+]+(\.[-_a-zA-Z0-9+]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,4})"/>

(注:@后面的[a-zA-Z0-9-]+里的-本来就在结尾,是合法的,无需修改)

验证修改效果

修改完XSD后,重新执行编译命令:

mvn clean compile -e

应该就能绕过这个正则校验错误了。

如果这是第三方提供的XSD无法修改,你可以考虑在JAXB2 Maven插件的配置中添加参数关闭正则校验,但这是下策——因为正则本身确实不符合XML Schema规范,可能会导致后续的XML校验出问题,所以优先推荐修正正则表达式。

内容的提问来源于stack exchange,提问作者Ali Ouda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:49:56