如何使用正则表达式添加分隔符



嗨,我这里有一个示例日志文件:

Jan 1 22:54:17 drop   %LOGSOURCE% >eth1 rule: 7; rule_uid: {C1336766-9489-4049-9817-50584D83A245};
Jan 1 22:54:22 drop   %LOGSOURCE% >eth1 rule: 7; rule_uid: {C1336766-9489-4049-9817-50584D83A245};
Jan 1 22:54:23 drop   %LOGSOURCE% >eth1 rule: 7; rule_uid: {C1336766-9489-4049-9817-50584D83A245};
Jan 1 22:54:41 drop   %LOGSOURCE% >eth1 rule: 7; rule_uid: {C1336766-9489-4049-9817-50584D83A245};

默认的分隔符是分号(;),我想用分隔符分隔时间戳和"drop",以及带"%LOGSOURCE%"的"drop"。我没有得到预期的结果。这整个代码是用来插入分隔符的。)我的主要想法是将日志文件从ArrayList添加到字符串中(根据我目前的Java知识,可以使用正则表达式),并相应地添加分隔符。

错误如下:

线程"main"异常java.lang.RuntimeException:不可编译的源代码-错误的树类型:在testing.Testing.main(Testing.java:31)中,它从listString行开始。replaceAll (regex命令)

注意:我只是尝试将分隔符放在时间戳和"drop"之间,然后发生了错误。我不明白如何使用正则表达式,我真的需要帮助!

public class Testing {
public static void main(String[] args) throws FileNotFoundException {
    Scanner inFile1 = new Scanner(new File("filename")).useDelimiter(";");
    List<String> temps = new ArrayList<String>();
    String listString = "";
    while (inFile1.hasNext()) {
        // find next line
        String token1 = inFile1.next();
        temps.add(token1);
    }
    inFile1.close();
    for (String s : temps) {
        listString += s + "t";
        listString.replaceAll(s,([a-zA-Z]{3}sd{1,2}sd{2}:d{2}:d{2})(s)(drop)));
    }
    System.out.println(listString);
}
"[a-zA-Z]{3}\s\d{1,2}\s\d{2}:\d{2}:\d{2}\sdrop"

以上应该可以工作。你不需要所有的括号。出现这种异常的原因可能是原始表达式中左右括号的数量不匹配

字符串。replaceAll(字符串正则表达式,字符串替换)方法接受两个String参数。

你需要用引号封装regex模式。此外,在java中,您需要转义正则表达式模式中的/字符。

使用replaceAll(...)方法的行应该看起来像这样:

listString.replaceAll("([a-zA-Z]{3}\s\d{1,2}\s\d{2}:\d{2}:\d{2})(\s)(drop)",s);

由于行前缀中除了日期以外的其他日期都是固定长度,因此最简单的解决方案是:

line = line.replaceAll("^(... \d+ .{8}) drop ", "$1;drop;");

相关内容

  • 没有找到相关文章

最新更新