You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Perl正则转Java:Postfix日志解析代码示例请求

从Perl到Java:Postfix日志收件人提取实现

我来帮你把这段Perl的Postfix日志解析逻辑转成可运行的Java代码,完全贴合你要的需求~

先唠唠原Perl代码的作用:

@{$line_info{to}} = $line_info{text} =~ m/\bto=([^,]+),/g;

这段代码会全局匹配日志行里所有以词边界开头的to=,然后提取to=后面到第一个逗号之间的内容,把所有匹配结果存到数组里,用来获取日志里的收件人信息。

下面是对应的可运行Java示例,直接就能跑:

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class PostfixLogParser {
    // 对应Perl正则的Java版本,注意转义\b为\\b
    private static final Pattern TO_PATTERN = Pattern.compile("\\bto=([^,]+),");

    public static List<String> extractRecipients(String logLine) {
        List<String> recipients = new ArrayList<>();
        Matcher matcher = TO_PATTERN.matcher(logLine);
        
        // 全局匹配所有符合条件的收件人(对应Perl的/g修饰符)
        while (matcher.find()) {
            // 提取第一个分组的内容,也就是to=和逗号之间的部分
            recipients.add(matcher.group(1));
        }
        return recipients;
    }

    public static void main(String[] args) {
        // 测试用的示例日志行,和你给的格式一致
        String sampleLogLine = "Apr 22 07:08:33 server postfix/smtp[12345]: 123ABC: to=<user1@example.com>, relay=mx.example.com[192.168.1.1]:25, delay=1.2, delays=0.1/0/0.5/0.6, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 456DEF)";
        
        List<String> recipients = extractRecipients(sampleLogLine);
        
        // 输出结果
        System.out.println("提取到的收件人:");
        for (String recipient : recipients) {
            System.out.println("- " + recipient);
        }
    }
}

代码说明:

  • 正则\\bto=([^,]+),:\\b确保to=是独立的词(不会匹配比如xto=这种情况),([^,]+)捕获to=后面直到第一个逗号的所有内容,完美对应Perl的逻辑。
  • matcher.find()循环:实现Perl里的全局匹配/g,把所有符合条件的收件人都找出来。
  • 返回List<String>:对应Perl里的数组,用来存储多个收件人(如果日志行里有多个to=的情况)。

运行这段代码后,你会得到输出:

提取到的收件人:
- <user1@example.com>

如果日志行里有多个收件人,比如to=<user1@example.com>, to=<user2@example.org>,,代码也会把两个都提取出来哦~

内容的提问来源于stack exchange,提问作者MitchBroadhead

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:43:19