【问题标题】:Pattern And Matcher: How to -- concatenate a pattern and a string for file search模式和匹配器:如何连接模式和字符串以进行文件搜索
【发布时间】:2012-04-17 16:31:09
【问题描述】:

所以我在 Java 中使用 AWS 开发工具包,并创建了一个类来下载 S3 服务器中的存储桶/对象。

我现在需要创建诸如通配符或模式之类的东西来附加一个名为(“报告”)的字符串。我想出的唯一方法是创建一个模式匹配器变量,如下所示:

 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)));

   }   

你们觉得呢?真的很感激。谢谢!

【问题讨论】:

  • 哪个更好,或者哪个更好/更正确?
  • 您正在创建一个 Matcher 对象,但不是实际使用它,而是将其转换为字符串。这永远不会是正确的。
  • 我明白了。你对我应该如何以不同的方式处理这个问题有什么建议吗?我需要在“报告”之前创建一个模式。
  • 好吧,我在 Amazon S3 API 中绝对看不到任何采用 Matcher 对象的方法,是吗?我认为您将不得不获得比您想要的更大的列表,然后通过应用程序中的模式匹配来缩减结果。

标签: java class amazon-s3 amazon-web-services amazon


【解决方案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 + 替换为对您的代码更有意义的内容。

【讨论】:

  • 如果我误解了你,请纠正我,但从你的意思来看,使用我制作的 (m + "reports") 片段,匹配器将查找 p 中所述的模式,然后将它与报告连接起来,是吗?如果是这样,我相信它正在做我想做的事。虽然我对它做了一些小的调整。请看我编辑的帖子。我真诚地希望听到您的更多消息!
  • m + "reports" 块不会寻找任何模式。与m.toString() + "reports" 相同。 Matcher 对象的 toSTring() 只是对象本身的字符串表示,而不是匹配项。它会因 JRE 而异。在我的情况下,它导致了我在上面显示的java.util.regex.Matcher[pattern=[a-zA-Z][0-9] region=0,4 lastmatch=]
  • 快速浏览一下 Amazon API 似乎表明您不能使用正则表达式作为前缀。它似乎只接受一个简单的字符串。请参阅docs.amazonwebservices.com/AWSJavaSDK/latest/javadoc/com/… 中的示例。所以除非你能找到可以支持正则表达式的积极迹象,否则我认为你需要放弃这种方法并恢复为简单的字符串作为前缀,然后有自己的代码来过滤你需要的内容。
  • 谢谢你们!我非常感谢您的帮助。
  • 所以...这实际上不是一个答案。
猜你喜欢
  • 2013-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-11
  • 1970-01-01
  • 1970-01-01
  • 2018-12-01
  • 1970-01-01
相关资源
最近更新 更多