java - 优化 Java Scanner 以更快地匹配文件中的正则表达式

标签 java regex

我目前正在使用此代码来将正则表达式与许多文件进行匹配,但是,这相当慢。有没有办法可以做同样的事情,但速度更快?

public class Filter {
    private String title;
    private String regex;
    private List<String> results = new LinkedList<String>();
    ...
}

我有一些针对不同类型正则表达式的过滤器,它们的范围从匹配电子邮件到匹配单词(如 apikey),...该代码将用于扫描反编译类和其他基于文本的文件中的漏洞。

我的代码也只检查文件中的 1 个匹配项,我想获取所有匹配项。

public void startScans() {
    List<File> files = getAllFiles(getFolder()); //Gets a list of all text based files in a folder
    for (int i = 0; i < files.size(); i++) {
        for(Filter filter : getFilters()) {
            try {
                System.out.print("\rScanning file " + i + " out of " + files.size() + " using filter " + filter.getTitle() + "...");
                scanFile(files.get(i), filter);
            } catch (FileNotFoundException ignored) {}
        }
    }
}

private void scanFile(File f, Filter filter) throws FileNotFoundException {
    Scanner scanner = new Scanner(f);
    String result = scanner.findWithinHorizon(filter.getRegex(), 0);
    if (result != null) {
        filter.addResult(result);
    }
    scanner.close();
}

最佳答案

如果想要更快的执行速度,也可以使用外部工具,即执行命令。例如

  • Windows:findstr/R [a-z]*xyz *

  • Linux:egrep -R "[a-z]*xyz".

注意:您可以从 Java 运行这些命令。

关于java - 优化 Java Scanner 以更快地匹配文件中的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31452038/

相关文章:

java - 在 Elasticsearch Java API 中使用建议

正则表达式获取除当前词典和父词典之外的点文件

c# - 解析PnPID的正则表达式

javascript - 当我在数组上测试正则表达式时,为什么它返回 false?

java - Loop 中使用的接口(interface)实现

java - 如何通过持久性动态配置数据库连接

java - 为什么这个 JTextField 不显示内容?

java - 在 PropertySheet JavaFX 中设置 bean 字段的类别名称

javascript - 名称的正则表达式模式在 adobe cq5 中不起作用

java - 我的正则表达式中缺少什么来匹配?