2012-04-03 13 views
0

私はJavaでAWS SDKを使用しています.S3サーバーにあるバケット/オブジェクトをダウンロードするクラスを作成しました。パターンとマッチャー:ファイル検索のパターンと文字列を連結する方法

私が今必要とするのは、ワイルドカードやパターンを追加するパターン(「reports」という名前の文字列など)を作成することです。私が作ってみただけの事はそうのようなパターンマッチャー変数を作成することです:

Pattern p = Pattern.compile("[a-zA-Z][0-9]"); 
    Matcher m = p.matcher(prePattern); 

    ObjectListing s3ObjectList = s3client.listObjects(new ListObjectsRequest() 
               .withBucketName(bucketName) 
               .withPrefix(m + "reports"));+ 

私もやった私は何をしようとしているとか、あればよりよい解決策があるかどう誰も私に教えてくださいすることができそれは適切ですか?

ありがとうございます!


新コード:

 String bucketName = "blabla"; 
     String prePattern = "^[a-z0-9_-]{1,30}$"; 
     String prefixPat = " -- Insert Pattern Here -- "; 
     ArrayList<String> objPrefix = new ArrayList(); 

    Pattern p = Pattern.compile(prePattern); 
    Matcher m = p.matcher(prefixPat); 

    for(int i=0; i<= objPrefix.size(); i++) 
    { 
     objPrefix.add(m + "reports"); 
     ObjectListing s3ObjectList = s3client.listObjects(new ListObjectsRequest() 
               .withBucketName(bucketName) 
               .withPrefix(objPrefix.get(i))); 

    } 

思考君たち?それは本当に感謝します。ありがとう!

+0

どちらが優れているの? –

+0

Matcherオブジェクトを作成していますが、実際に使用する代わりに、MatcherオブジェクトをStringに変換しています。それは決して正しいとは限りません。 –

+0

私は参照してください。どのように私がこれに違ってアプローチすべきかについての示唆はありますか?私は "レポート"の前に行くパターンを作る必要があります。 –

答えて

1

AWSについてよく分かりませんが、コードのm + "reports"m.toStringを呼び出し、リテラルの「レポート」と連結しています。通常MatcherオブジェクトのtoStringはそれほど有用ではありません。コードのこの部分から

Pattern p = Pattern.compile("[a-zA-Z][0-9]"); 
Matcher m = p.matcher("test"); 
System.out.println(m + "reports"); 

私はOS X上これを取得する:

java.util.regex.Matcher[pattern=[a-zA-Z][0-9] region=0,4 lastmatch=]reports 

おそらくないあなたがObjectListingに渡すしたいもの。

m +をコードに合ったものに置き換える必要があります。

+0

私があなたを誤解した場合は私を修正してください。しかし、あなたが言っていることは、私が作った(m + "reports")ピースでは、マッチャーはpで述べられたパターンを探して、 ?もしそうなら、私はそれが私が望むことをしていると信じています。私はそれに少し調整を加えましたが。私の編集したポストを見てください。私は心からあなたからもっと聞くのが大好きです! –

+0

'm +"は "パターン"の部分はパターンを探しません。これは 'm.toString()+"が "' 'を報告するのと同じです。 MatcherオブジェクトのtoSTring()は、オブジェクト自体の文字列表現であり、一致しません。それはJREによって異なります。私の場合は、上で示した 'java.util.regex.Matcher [pattern = [a-zA-Z] [0-9] region = 0,4 lastmatch =]'という結果になりました。 – chr

+0

Amazon APIを簡単に見てみると、正規表現を接頭辞として使用できないことがわかります。それは単純な文字列を受け入れるようです。 http://docs.amazonwebservices.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/model/ObjectListing.html#getCommonPrefixes()の例を参照してください。だから、正規表現をサポートできるという肯定的な示唆が見つからない限り、私はこのアプローチを放棄し、接頭辞として単純な文字列に戻し、必要なものをフィルタリングする独自のコードを持つ必要があると思います。 – chr

関連する問題