关于正则式中的 |

今天在看dubbo的源码过程中,看到它提供了一个正则式来匹配用户配置的注册中心的地址,这个正则式代码是在一个常量类com.alibaba.dubbo.common.Constants中,

public static final Pattern REGISTRY_SPLIT_PATTERN = Pattern
.compile("\\s*[|;]+\\s*");

调用的代码是在UrlUtils类中

 public static List<URL> parseURLs(String address, Map<String, String> defaults) {
        if (address == null || address.length() == 0) {
            return null;
        }
        String[] addresses = Constants.REGISTRY_SPLIT_PATTERN.split(address);
        if (addresses == null || addresses.length == 0) {
            return null; //here won't be empty
        }
        List<URL> registries = new ArrayList<URL>();
        for (String addr : addresses) {
            registries.add(parseURL(addr, defaults));
        }
        return registries;
    }

 

这个正则式的作用这里分析一下:

  \s : 表示一个或多个空白字符

  *  : 匹配前面的子表达式零次或多次。

  | :  指明两项之间的一个选择。

 + :  匹配前面的子表达式一次或多次

上面这个正则式完整的意思是要匹配去除前后空白字符后的字符串中,如果有" | "字符或者" ; "字符出现的这种情况,|的左边如果没有字符似乎就相当于左边的字符是|,经过程序验证,的确是这样的一个效果

    
    @Test
    public void test3() {
        Pattern pattern1 = Pattern.compile("\\s*[|;]+\\s*");
        
        Pattern pattern2 = Pattern.compile("\\s*[;]+\\s*");
        
        String input = "3a|a2" ;
        
        String[] strs1 = pattern1.split(input) ;
        String[] strs2 = pattern2.split(input) ;
        
        System.out.println( "strs1:" + strs1.length );  //输出为2
        System.out.println( "strs2:" + strs2.length);   //输出为1
    }

 

转载于:https://www.cnblogs.com/hzhuxin/p/7682131.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值