我想允许ant属性使用以下语法foo_abc:bar1,bar2,blah|foo_def:bar1,bar2|s64lk:kj,34kj
我写了下面的ant条件来验证并存储在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
作为意外通过
任何想法如何修复正则表达式?
让我们仔细看看当前的不匹配条件:
^.*[ =}{.;)(]+*^\'].*$
^ ^
| |
Start End of the character class
当前的char类是[ =}{.;)(]
,您希望它是:
[ =}{.;)(]+*^\']
^
按预期工作