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

标签 java amazon-web-services

我想按照这些规范为亚马逊制作一个 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/

相关文章:

java - 错误 : package org. apache.commons.beanutils 不存在

java - Spring Social facebook + spring security 对电子邮件和用户名范围的权限

python - AWS Lambda 不断从 Lambda 返回 "\"Hello!\”

amazon-web-services - 从现有 RDS 数据库实例 (Aurora PostgreSQL) 创建 CloudFormation Yaml

amazon-web-services - AWS EC2实例是Docker镜像还是虚拟机?

python - 无法导入模块 'lambda_function' : No module named 'cx_Oracle'

amazon-web-services - 从 Lambda 访问 EC2 中的文件

java - 了解 EJB3/JPA 容器级事务和隔离级别

java - AsyncTask 不刷新 UI

java - Android REST API 连接