2012-01-31 2 views
3

Я проверяю десятичные знаки с точностью (5,2), которые могут иметь отрицательные числа, используя регулярное выражение в распорках. Когда я пытаюсь запустить этот ^[-+]?[0-9]{1,3}+(\.[0-9]{1,2})$ в java, он отлично работает. Но одно и то же выражение в стойках бросается ниже ошибки.Регулярное выражение в строках

org.apache.struts.validator.FieldChecks processFailure mask validation failed for property inputCost: org.apache.oro.text.MalformedCachePatternException: Invalid expression: ^[-+]?[0-9]{1,3}+(\.[0-9]{1,2})$ Nested repetitions *?+ in expression

Вот фрагмент кода 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> 

Любые материалы приветствуются.

ответ

2

Ваше регулярное выражение технически неверно. У вас не может быть + после квалификатора {,}, это как сказать .*+ или .?* (+ - специальный метасимвол в регулярном выражении, означающий «один или несколько», точно так же, как * означает «ноль или больше»).

Попробуйте

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

Обратите внимание на {1,3}+ это просто {1,3}.

+0

«+» после квантификатора делает квантификатор «притяжательным квантификатором», что означает, что он не отступает. Но не все вкусы поддерживают притяжательные кванторы. См. здесь, в [Perlretut] (http://perldoc.perl.org/perlretut.html#Possessive-quantifiers) – stema

+0

Ahh, спасибо @stema. Я никогда не сталкивался с этим особым причудом раньше, я думаю, что более общим для этого является конструкция '(?> ...)' (немного более широко поддерживается, хотя все еще не распространена). –

Смежные вопросы