在流上执行正则表达式
我有一些大型文本文件,我将预先形成连续匹配(只是捕获,而不是替换)。我认为将整个文件保存在内存中不是一个好主意,而是使用.Reader
我对输入的了解是,如果有匹配项,它不会跨越超过5行。所以我的想法是有某种缓冲区,只保留这5行,或者,做第一次搜索,然后继续。但它必须“知道”正则表达式匹配在哪里结束才能起作用。例如,如果匹配在第2行结束,则应从这里开始下一次搜索。是否有可能以有效的方式做这样的事情?
我有一些大型文本文件,我将预先形成连续匹配(只是捕获,而不是替换)。我认为将整个文件保存在内存中不是一个好主意,而是使用.Reader
我对输入的了解是,如果有匹配项,它不会跨越超过5行。所以我的想法是有某种缓冲区,只保留这5行,或者,做第一次搜索,然后继续。但它必须“知道”正则表达式匹配在哪里结束才能起作用。例如,如果匹配在第2行结束,则应从这里开始下一次搜索。是否有可能以有效的方式做这样的事情?
您可以使用 a 和 findWithinHorizon
方法:Scanner
Scanner s = new Scanner(new File("thefile"));
String nextMatch = s.findWithinHorizon(yourPattern, 0);
从 findWithinHorizon
上的 api:
如果视界为 0,则忽略视界,此方法继续搜索输入,查找无界的指定模式。在这种情况下,它可以缓冲所有搜索模式的输入。
附注:在多行上进行匹配时,您可能希望查看常量和 .Pattern.MULTILINE
Pattern.DOTALL