我希望按照这些规范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字节。
我应该如何使用正则表达式检查?
答案 0 :(得分:1)
我认为问题在于:" _-!"。编译器试图将该序列解释为一系列字符而不是单个字符。
尝试重新排序它们,或使用像这样的转义字符:" _ \ - !"。
在java中创建转义字符需要两个反斜杠。
编辑:要检查字符串是否少于1024字节,请参阅此问题:bytes of a string in java?