Java 通过正则替换 rabbitMQ topic 的路由 key

Topic 规则描述

1、对 key 进行分割,分割符为 “.” ,分割后得到多个单词,将每个单词看作一个整体,空也算一个单词。 (ab…bc 切割后得到 【ab, Ø, bc】)
2、* 匹配 1 个单词。 (对应正则的 [^\.]*)
3、# 匹配 0 或 多个单词。(对应正则的 ([^\.]*\.)*)

代码实现

/**
     * 将 # 和 * 转换为正则表达式
     * @param key
     * @return
     */
    public static String changeRouteKey(String key) {

        key = changeRegular(key);

        // .*.  .*$  ^*.   ===> .[^\.]*.  .[^\.]*$  ^[^\.]*.
        key = key.replaceAll("\\\\\\.\\\\\\*\\\\\\.", "\\\\\\.[^\\\\.]*\\\\\\.");
        key = key.replaceAll("\\\\\\.\\\\\\*$", "\\\\\\.[^\\\\.]*\\$");
        key = key.replaceAll("^\\\\\\*\\\\\\.", "^[^\\\\.]*\\\\\\.");

        // .#. ===> .([^\.]*\.)*
        key = key.replaceAll("\\\\\\.#\\\\\\.", "\\\\\\.([^\\\\.]*\\\\\\.)*");

        // ^#. ===> ^[^\.]*(\.[^\.]*)*
        key = key.replaceAll("^#\\\\\\.", "^([^\\\\.]*\\\\\\.)*");

        // .#$ ===> [^\.]*(\.[^\.]*)*$
        key = key.replaceAll("\\\\\\.#$", "(\\\\\\.[^\\\\.]*)*\\$");

        return key;
    }

    /**
     * 转义正则特殊字符 ($()*+.[]?\^{},|)
     * @param keyword
     * @return
     */
    public static String changeRegular(String keyword) {
        if (StringUtils.isNotBlank(keyword)) {
            String[] fbsArr = { "\\", "$", "(", ")", "*", "+", ".", "[", "]", "?", "^", "{", "}", "|" };
            for (String key : fbsArr) {
                keyword = keyword.replace(key, "\\" + key);
            }
        }
        return keyword;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值