java - 正则表达式解析 Kafka 监听器

标签 java spring-boot apache-kafka

我正在监听 Kafka 主题并接收消息,将它们与对象进行比较,然后尝试解析消息。我收到了多条有关某项搜索的消息,而我只是想获取该搜索

<小时/>

userName:User.Name userId:FDF3JH4 session:9cf2-21-c6-28-c360f1edba53 searchString:test, searchType:DEFAULT_SEARCH 这就是我想要的

<小时/>

LogPattern 为 String logPattern = ".*(userName:)(\\S+)\\s(userId:)(\\S+)\\s(session:)(\\S+)\\s(searchString:)([^,]).*";

    if (isValidObject) {
        final Pattern p = Pattern.compile(logPattern);
        Matcher matcher = p.matcher(historyRequest.getLog());

        if (!matcher.matches()) {
            return;
        }

我设置了一个测试函数来确保我收到的消息和我的模式是正确的,但是当我将其放入实际函数中时,它不起作用。它不会返回 String logPattern = ".*"; 的结果但是,奇怪的是,当弄乱日志模式时,我能够获得具有此日志模式和此日志的 kafka 消息的匹配:

<小时/>

String logPattern = ".*[用户名]\\:(\\S+)\\s\\w+:(\\S+)(\\s\\S+\\s\\w+\\:)([^,]+).*";

<小时/>

userName:User.Name userId:D394H4 session:3f1da-0c-fb-90-949a searchString:"test"take:13.0 page:1 resultSize:1 赞助:false

最佳答案

据我所知,您几乎有一个匹配的模式。我猜它没有完全按照您的要求做,因为它没有选择 searchString 参数。我在下面发布了一些代码,其中稍微修改了您的模式版本。我做了两件事:

  1. 我删除了常量文本周围的括号
  2. 我修复了模式以匹配 searchString 之后直到逗号的所有文本

代码如下:

public class Logtest {

    String logPattern_orig = ".*(userName:)(\\S+)\\s(userId:)(\\S+)\\s(session:)(\\S+)\\s(searchString:)([^,]).*";
    String logPattern = ".*userName:(\\S+)\\suserId:(\\S+)\\ssession:(\\S+)\\ssearchString:([^,]*),.*";

    String kafkaMsg = "userName:User.Name userId:FDF3JH4 session:9cf2-21-c6-28-c360f1edba53 searchString:test, searchType:DEFAULT_SEARCH";

    void test() {
        final Pattern p = Pattern.compile(logPattern);
        Matcher matcher = p.matcher(kafkaMsg);

        if (matcher.matches()) {
            System.out.println("Matches!");
            for (int i=1; i <= matcher.groupCount(); i++) {
                System.out.println("Group " + i + "='" + matcher.group(i) + "'");
            }
        }

    }

    public static final void main(String[] args) {
        Logtest lt = new Logtest();
        lt.test();
    }

}

当我运行它时,我得到以下输出:

Matches!
Group 1='User.Name'
Group 2='FDF3JH4'
Group 3='9cf2-21-c6-28-c360f1edba53'
Group 4='test'

关于java - 正则表达式解析 Kafka 监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55209203/

相关文章:

java - 对于 if-else 条件,哪一种更好的做法?

java - Zest 中的坐标导出

java - 从外部库向类添加 Parcelable 接口(interface)

java - 如何在一个 Android Activity 中创建一个实例变量?

java - Spring boot 的 Arango Edge 创建错误

java - Spring Boot将apache activemq迁移到artemis

java - 如何使用 Spring WebClient 进行同步调用?

error-handling - 使用 Kafka 的 Streams API 处理不良消息

apache-kafka - 多个集群上的 Kafka 事务

java - 如何从kafka avro记录生成pojo?