在流上执行正则表达式

2022-09-03 00:49:40

我有一些大型文本文件,我将预先形成连续匹配(只是捕获,而不是替换)。我认为将整个文件保存在内存中不是一个好主意,而是使用.Reader

我对输入的了解是,如果有匹配项,它不会跨越超过5行。所以我的想法是有某种缓冲区,只保留这5行,或者,做第一次搜索,然后继续。但它必须“知道”正则表达式匹配在哪里结束才能起作用。例如,如果匹配在第2行结束,则应从这里开始下一次搜索。是否有可能以有效的方式做这样的事情?


答案 1

您可以使用 a 和 findWithinHorizon 方法:Scanner

Scanner s = new Scanner(new File("thefile"));
String nextMatch = s.findWithinHorizon(yourPattern, 0);

findWithinHorizon 上的 api:

如果视界为 0,则忽略视界,此方法继续搜索输入,查找无界的指定模式。在这种情况下,它可以缓冲所有搜索模式的输入。

附注:在多行上进行匹配时,您可能希望查看常量和 .Pattern.MULTILINEPattern.DOTALL


答案 2

Streamflyer 能够对字符流应用正则表达式。

请注意,我是它的作者。