java - 单一模式以适应使用 Java 的多个正则表达式模式

标签 java regex

有一个要求,我被要求想出一个逻辑来删除一组可能的模式的特定日志文件,我能够单独创建它们,但我发现很难创建一种适用于所有这些场景的完整模式。

将“应用程序”视为创建的日志文件名,这些是我应该处理的场景:

  1. “应用程序.xml”
  2. “应用程序#number.xml”
  3. “application.xml.2016-01-10”

运行这些单独的模式,我能够删除想要删除的文件,但我正在寻找一个比使用 3 个单独的模式来执行此操作更好的版本。非常感谢任何帮助或意见!

代码片段:

public class PatternMatchPOC {
    public static void main(String[] args) {
        File logsDirectoryPath = new File("C:\\POCLogs");
        FileFilter patternFilter = getFilter();
        File[] list = logsDirectoryPath.listFiles(patternFilter);
        if (list.length > 0) {
            for (int i = 0; i < list.length; i++) {
                System.out.println("File" + i + " : " + list[i].getName());
            }
        } else {
            System.out.println("ERROR: No files available matching the pattern");
        }
    }

    public static FileFilter getFilter() {
        FileFilter patternFilter = new FileFilter() {

            Pattern p1 = Pattern.compile("application" + "\\.xml");
            Pattern p2 = Pattern.compile("application" + "\\.xml.\\d{4}-\\d{2}-\\d{2}");
            Pattern p3 = Pattern.compile("application" + "#..xml");

            @Override
            public boolean accept(final File file) {
                boolean first = p1.matcher(file.getName()).matches();
                boolean second = p2.matcher(file.getName()).matches();
                boolean third = p3.matcher(file.getName()).matches();

                return first | second | third;
            }
        };
        return patternFilter;
    }
}

最佳答案

不要使用 3 种不同的模式,而是使用 1 种模式将它们与 | 运算符组合起来。

所以代替:

Pattern p1 = Pattern.compile("application" + "\\.xml");
Pattern p2 = Pattern.compile("application" + "\\.xml.\\d{4}-\\d{2}-\\d{2}");
Pattern p3 = Pattern.compile("application" + "#..xml");

使用以下内容

String p1 = "application" + "\\.xml";
String p2 = "application" + "\\.xml.\\d{4}-\\d{2}-\\d{2}";
String p3 = "application" + "#..xml";

Pattern p = "(" + p1 + ")|(" + p2 + ")|(" + p3 + ")";

关于java - 单一模式以适应使用 Java 的多个正则表达式模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34720777/

相关文章:

java - 如何在 Eclipse 中将可执行 jar 文件添加到我的项目中?

java - 对象中的变量计数

java - 如何在Java中获取类的TypeTag

javascript - 使用正则表达式验证 URL 是否安全?

javascript - 捕获组的效率 (? : => work(? :\s+)? group VERSUS work(\s+)?group

regex - 索引函数中的正则表达式

java - 使用 Selenium WebDriver 将鼠标悬停并单击隐藏元素

java - 替代 ui :fragment in JSF

regex - 为电话号码编写正则表达式

java - 正则表达式从输入字符串中提取表达式