Java struts中的正则表达式

Java struts中的正则表达式,java,regex,struts,Java,Regex,Struts,我正在使用struts中的正则表达式验证精度为(5,2)的小数位数,该精度可能为负数。 当我尝试运行此^[-+]?[0-9]{1,3}+(\.[0-9]{1,2})$ 在java中,它运行良好。但是,struts中的相同表达式也出现了错误 org.apache.struts.validator.FieldChecks进程失败掩码验证属性inputCost:org.apache.oro.text.MalformedCachePatternException:无效表达式:^[-+]?[0-9]{1,

我正在使用struts中的正则表达式验证精度为(5,2)的小数位数,该精度可能为负数。 当我尝试运行此
^[-+]?[0-9]{1,3}+(\.[0-9]{1,2})$
在java中,它运行良好。但是,struts中的相同表达式也出现了错误

org.apache.struts.validator.FieldChecks进程失败掩码验证属性inputCost:org.apache.oro.text.MalformedCachePatternException:无效表达式:^[-+]?[0-9]{1,3}+(\.[0-9]{1,2})$
嵌套重复*?+在表达式中

下面是validation.xml的代码片段

        <field property="inputCost" depends="double,mask">
            <arg position="0"  key="label.inputCost"/>
            <msg name="mask" key="label.inputCost.mask"/>
            <var>
                <var-name>mask</var-name>
                <var-value>^[-+]?[0-9]{1,3}+(\.[0-9]{1,2})$</var-value>
            </var>
        </field>

面具
^[-+]?[0-9]{1,3}+(\.[0-9]{1,2})$

非常感谢您的任何输入。

您的正则表达式在技术上是不正确的。在
{,}
限定符之后不能有
+
,这就像说
*+
?*
(在正则表达式中,
+
是一个特殊的元字符,意思是“一个或多个”,就像
*
意思是“零个或多个”)

试一试


注意,
{1,3}+
只是一个
{1,3}

a
+
,在一个量词使该量词成为“所有格量词”之后,这意味着它不会回溯。但并非所有的口味都支持所有格量词。例如,请参见《啊哈》,谢谢@stema。我以前从未遇到过这种特殊的怪癖,我认为更常见的是
(?>…)
构造(支持范围更广,但仍然不常见)。
^[-+]?[0-9]{1,3}(\.[0-9]{1,2})$