zoukankan      html  css  js  c++  java
  • 关于正则式中的 |

    今天在看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
        }
  • 相关阅读:
    快速排序
    jenkins 升级
    JAVA中的Random()函数
    拦截器
    两个链表合并不加入新的链表空间
    统计字符 比如aaabbcca----3a2b1c1a
    折半查找两种实现
    字符串偏移
    java值传递
    基于zookeeper实现配置集中管理【转】
  • 原文地址:https://www.cnblogs.com/hzhuxin/p/7682131.html
Copyright © 2011-2022 走看看