为命名对象创建正则表达式验证

时间:2017-03-24 01:47:03

标签: java amazon-web-services

我希望按照这些规范http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html#object-keys为亚马逊制作验证器。

我创建了我的模式:

private static Pattern objectKeyNamePtrn = Pattern.compile("^[a-z0-9_-!.*'()]{6,30}$");  

但是,我收到了错误:

  

线程中的异常" main" java.lang.ExceptionInInitializerError   引起:java.util.regex.PatternSyntaxException:非法字符   范围附近的范围11 ^ [a-z0-9 _-!。*'()] {6,30} $

我尝试逃避' \'但是没有工作。

亚马逊人也说,密钥的名称是一系列Unicode字符,其UTF-8编码长度最多为1024字节。

我应该如何使用正则表达式检查?

1 个答案:

答案 0 :(得分:1)

我认为问题在于:" _-!"。编译器试图将该序列解释为一系列字符而不是单个字符。

尝试重新排序它们,或使用像这样的转义字符:" _ \ - !"。

在java中创建转义字符需要两个反斜杠。

编辑:要检查字符串是否少于1024字节,请参阅此问题:bytes of a string in java?