【问题标题】:Trouble with Readline and regex matchingReadline 和正则表达式匹配的问题
【发布时间】:2011-12-31 17:20:22
【问题描述】:

我的电脑上有一个 (ANSI) 文本文件 (filters.txt),每一行都有一个正则表达式。

在我的主目录中,我循环浏览一个 RSS 提要;每个项目都被传递给另一个方法以检查 filters.txt 中的匹配项。

问题是似乎没有任何匹配项。

  • 我传递给方法的字符串是正确的(经过测试)
  • 我的正则表达式是正确的(经过测试)
  • filters.txt 中的输入“似乎”与文本文件中的相同
  • 可能是换行符或其他什么东西搞砸了模式匹配?我是否需要使用其他工具来读取文本文件才能完成这项工作?

这是我的方法的代码:

public static boolean filtermatch(String rsstitle) {
    boolean result = false;

      try {
          BufferedReader br = new BufferedReader(new FileReader("filters.txt"));
          String strLine;

          while ((strLine = br.readLine())!= null && result == false) {
              if(Pattern.matches("(?i)" + strLine, rsstitle)) {
                  result = true;
              }
          }   
          br.close();
      } catch (Exception e) {
            System.err.println("Error: " + e.getMessage());
      }

    return result;
}

编辑: 我现在只有过滤器:

\\[HorribleSubs\\].*Chihayafuru.*

应该匹配“[HorribleSubs] Chihayafuru - 12 [720p].mkv”但它不是。如果我在程序中定义正则表达式,它匹配它。

【问题讨论】:

  • 已添加,查看结尾>.
  • new FileReader("filters.txt", "Cp1252") 明确指出该文件位于 Windows 代码页 1252 中,即 Latin1 的 Windows 变体。现在它使用操作系统默认值。
  • @JoopEggen:我同意您应该指定编码,但 FileReader 不允许您这样做。您必须使用包裹在 FileInputStream 周围的 InputStreamReader。

标签: java regex readline bufferedreader


【解决方案1】:

不要在文件中添加双反斜杠:Java 会将它们转换为“\\\\”。它读取一个像“\\”这样的反斜杠。

【讨论】:

  • Aaaaaaaaannnnnnnnnndddddddd 它正在工作!谢谢一打,我自己永远也想不通:)
  • @lelouch 是的,读入字符串与构造它们不同——转义只与源本身相关。
猜你喜欢
  • 2011-07-17
  • 2017-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多