在流上执行正则表达式

gwo*_*pq9 15 java regex

我有一些大的文本文件,我将进行连续匹配(只是捕获,而不是替换).我认为将整个文件保存在内存中并不是一个好主意,而是使用a Reader.

我对输入的了解是,如果匹配,它不会超过5行.所以我的想法是有一些缓冲区只保留这5行,或者左右,进行第一次搜索,然后继续.但它必须"知道"正则表达式匹配结束的位置才能实现.例如,如果匹配在第2行结束,它应该从这里开始下一次搜索.是否有可能以有效的方式做这样的事情?

aio*_*obe 26

您可以使用a ScannerfindWithinHorizon方法:

Scanner s = new Scanner(new File("thefile"));
String nextMatch = s.findWithinHorizon(yourPattern, 0);
Run Code Online (Sandbox Code Playgroud)

来自api findWithinHorizon:

如果horizo​​n为0,则忽略horizo​​n,此方法继续搜索输入,查找指定的模式而不绑定.在这种情况下,它可以缓冲搜索模式的所有输入.

旁注:在多行匹配时,您可能需要查看常量Pattern.MULTILINEPattern.DOTALL.