2017-03-24 7 views
0

私は、これらの仕様に従ったamazonのバリデーター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}$

私は '\' でエスケープ試みたが、うまくいきませんでした。

また、キーの名前は、UTF-8エンコーディングが最大1024バイトの長さのUnicode文字のシーケンスです。

正規表現を使用して確認する必要がありますか?

答えて

1

私は問題がここにあると思う: "_-!"。コンパイラは、そのシーケンスを個々の文字ではなく文字の範囲として解釈しようとしています。

並べ替えてみるか、「_ \ - !」などのエスケープ文字を使用してください。

javaでエスケープ文字を作成するには、2つのバックスラッシュが必要です。

編集:bytes of a string in java?

+0

ザッツ正しい:文字列が1024バイト以下である場合は、この質問を参照、確認します。私はそれを避けましたが、それは "_ \\ - !" Javaの場合ありがとう –