如何使用正则表达式解析Java中的文件?

时间:2011-02-10 08:21:07

标签: java regex parsing expression match

我正在尝试使用一系列正则表达式来解析文件中的标记。我需要计算换行符并能够分隔它们之间没有空格的标记。不幸的是,java.util.Scanner的findWithinHorizo​​n()方法搜索整个输入流的其余部分(直到地平线)以获得正则表达式匹配的START,但我想匹配从当前文件位置开始的正则表达式。具体来说,我有一堆正则表达式,并希望循环遍历它们以查看哪一个匹配从文件中的当前位置开始,然后在正则表达式匹配后将文件位置提前到右边,然后继续。这可能吗?

扫描程序的next()方法对此似乎没用,因为它强制执行分隔符,正则表达式必须匹配整个令牌;我想从当前文件位置匹配,获取匹配的字符串,并在匹配后将文件搜索推进。

1 个答案:

答案 0 :(得分:0)

选项:

  1. 将整个文件作为String读入内存。然后直接在您想要的位置使用Matcher

  2. 使用从FileChannel获取的RandomAccessFile作为Scanner的输入。然后,您可以直接操纵频道的位置。

  3. 使用上述FileChannel,但直接使用Matcher可获得更大的灵活性。

  4. 将Matcher与RandomAccessFile一起使用的示例:

    FileChannel fc = file.getChannel();
    fc.lock(); // so it doesn't change under you
    
    ByteBuffer bb = ByteBuffer.allocate(BUFFER_SIZE);
    CharBuffer cb = bb.asCharBuffer();
    
    fc.read(bb);
    Matcher matcher = pattern.matcher(cb);
    // etc.