正则表达式

正则表达式

说明: 正则表达式就是使用一种模式去匹配字符串的一个公式。

java简单实现

// 找出字符串中连续三个数字的子串
    public static void main(String[] args) {
        String str = "全球领先123的中文搜索引123擎、致力于让网民更12312便捷地123";
        // \\d :表示一个任意的数字
        String regStr = "(\\d\\d)(\\d)";
        // 创建一个模式对象
        Pattern compile = Pattern.compile(regStr);
        /**
         * 创建匹配器
         * exp: 根据正则表达式[\\d{3}],去匹配字符串。
         */
        Matcher matcher = compile.matcher(str);
        // 开始匹配
        /**
         * matcher.find()
         * 1.根据指定的规则,去找到满足规则的字符串(比如:123)
         * 2.将子串开始的索引记录到matcher对象的int[] groups 中;
         *   groups[0] = 4 , 把子字符串结束的索引+1的值记录到 groups[1] = 7
         * 3.同时记录oldLast的值为子字符串结束的索引+1(7),也就是下次执行find的时候
         *   就从7开始匹配。
         *
         * matcher.group(0)
         * 源码:
         *     public String group(int group) {
         *         if (first < 0)
         *             throw new IllegalStateException("No match found");
         *         if (group < 0 || group > groupCount())
         *             throw new IndexOutOfBoundsException("No group " + group);
         *         if ((groups[group*2] == -1) || (groups[group*2+1] == -1))
         *             return null;
         *         return getSubSequence(groups[group * 2], groups[group * 2 + 1]).toString();
         *     }
         *
         * 1.根据 groups[0] = 4  和 groups[1] = 7 记录位置,从str中截取子字符串,[5,8)。
         *
         * 如果再次执行 matcher.find() ,清空groups ;groups[0] = 13 , groups[1] = 16
         * 从str中截取子字符串,[13,16)
         *
         * 分组:
         * 正则表达式带有()表示分组。第1个(),表示第1组。。。。。
         *
         * matcher.find()
         * 1.根据指定的规则,去找到满足规则的字符串(比如:(12)(3))
         * 2.将子串开始的索引记录到matcher对象的int[] groups 中;
         *   2.1 groups[0] = 4 , 把子字符串结束的索引+1的值记录到 groups[1] = 7
         *   2.2 记录第1组()匹配到的字符串,groups[2] = 4,groups[3] = 6 ;
         *   2.3 记录第2组()匹配到的字符串,groups[6] = 4,groups[7] = 6 ;
         *   2.4 记录第3组......
         * 3.同时记录oldLast的值为子字符串结束的索引+1(7),也就是下次执行find的时候
         *   就从7开始匹配。
         */
        while (matcher.find()) {
           /**
             * 小结:
             * 1.如果正则表达式有():分组
             * 2.group[0] 匹配整体的子字符串
             * 3.group[1] 匹配整体的子字符串的第1组子串
             * 4.group[2] 匹配整体的子字符串的第2组子串
             */
            System.out.println("find String :" + matcher.group(0));
            System.out.println("find String first group :" + matcher.group(1));
            System.out.println("find String second group :" + matcher.group(2));
        }
        /**
         * results:
         * find String :123
         * find String first group :12
         * find String second group :3
         * find String :123
         * find String first group :12
         * find String second group :3
         * find String :123
         * find String first group :12
         * find String second group :3
         * find String :123
         * find String first group :12
         * find String second group :3
         */
    }

基本语法

限定符

字符匹配符

符号说明示例解释
[]可以匹配的字符列表[ABC]匹配ABC中任意一个字符
[^]匹配除了 [] 中字符的所有字符[^ABC]匹配除了ABC中任意一个字符
-连字符[A-Z]匹配除了A-Z之间的任意一个字符

选择匹配符

分组组合

反向引用符

特殊字符

定位符

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值