gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 04:53:03 26 4
gpt4 key购买 nike

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

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

  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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com