我想按照这些规范为亚马逊制作一个 validator http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html#object-keys .
我创建了我的模式:
private static Pattern objectKeyNamePtrn = Pattern.compile("^[a-z0-9_-!.*'()]{6,30}$");
但是,我收到错误:
Exception in thread "main" java.lang.ExceptionInInitializerError Caused by: java.util.regex.PatternSyntaxException: Illegal character range near index 11 ^[a-z0-9_-!.*'()]{6,30}$
我尝试使用“\”进行转义,但没有成功。
亚马逊人员还说, key 的名称是 Unicode 字符序列,其 UTF-8 编码长度最多为 1024 字节。
我应该如何使用正则表达式来检查?
最佳答案
我认为问题出在这里:“_-!”。编译器尝试将该序列解释为一系列字符而不是单个字符。
尝试重新排序它们,或使用转义字符,如下所示:“_\-!”。
在java中创建转义字符需要两个反斜杠。
编辑:要检查字符串是否小于 1024 字节,请参阅此问题:bytes of a string in java?
关于java - 为命名对象创建正则表达式验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42990023/