匹配一个ant正则表达式而不是其他

时间:2016-10-08 01:14:56

标签: java regex ant

我想为我的ant属性允许以下语法 foo_abc:bar1,bar2,blah|foo_def:bar1,bar2|s64lk:kj,34kj

我编写了以下蚂蚁条件来验证并存储在legalmyprop中。第一个matches匹配完整的有效字符串。以下not matches明确禁止用户可能尝试的任何其他特殊字符。 not匹配似乎不起作用

<condition property="legalmyprop" value="${myprop}">
  <and>
      <matches string="${myprop}" pattern="^[^:,|]+:[^,:|]+(,[^:,|]+)*(\|[^:,|]+:[^:,|]+(,[^:,|]+)*)*$" />
      <not> <matches string="${myprop}" pattern="^.*[ =}{.;)(]+\*^\\'].*$" /> </not>
      <not> <matches string="${myprop}" pattern='^.*["].*$' /> </not>
  </and>
</condition>

foo:bar,按预期失败

foo_abc:bar1,bar2,blah|foo_def:bar1,bar2|s64lk:kj,34kj通过 预期

foo::bar|按预期失败

foo:bar.abc通过意外

foo:bar=abc通过意外

如何修复正则表达式的任何想法?

1 个答案:

答案 0 :(得分:1)

让我们仔细看看你目前的不匹配条件:

^.*[ =}{.;)(]+\*^\\'].*$
   ^        ^
   |        |
 Start     End of the character class

当前的char类是[ =}{.;)(],你希望它是:

[ =}{.;)(\]+\*^\\']
         ^

按预期工作