关于正则式中的 |

今天在看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
    }

 

posted @ 2017-10-17 15:54  杭州胡欣  阅读(273)  评论(0编辑  收藏  举报