我想为我的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
通过意外
如何修复正则表达式的任何想法?
答案 0 :(得分:1)
让我们仔细看看你目前的不匹配条件:
^.*[ =}{.;)(]+\*^\\'].*$
^ ^
| |
Start End of the character class
当前的char类是[ =}{.;)(]
,你希望它是:
[ =}{.;)(\]+\*^\\']
^
按预期工作