正则表达式

  1. 正则表达式: 即通过一些特定的符号操作字符串数据
  2. 特点: 简化了书写,但是阅读性较差
  3. 位于 java.util.regex 包中

匹配规则

1222878-20170915081717938-1729815108.png

1222878-20170915081728250-757094040.png

正则表达式对字符的常见操作

// 1. 匹配,
    // 其实使用的就是 String 类中的 matches(String regex) 方法

// 2. 切割
    // 其实使用的就是 String 类中的 split 方法

    // 示例一
        String str = "zhangsan.xiaoqiang.zhaoliu";

        String[] name = str.split("\\.")  //  其中 \\ 是对 \ 进行转义

    // 示例二
        String str = "zhangsanttttxiaoqiangmmmmmzhaoliu";

        String[] name = str.split("(.)\\1+");  // 正则中的封装使用 (),
                                              // tttt 中第二个字符复用第一个字符

// 3. 替换
    // 其实使用的就是 String 类中的 replaceAll(String regx, String replacement) 方法

    // 示例一: 将字符串中的叠词替换为一个
        String str = "zhangsanttttxiaoqiangmmmmmzhaoliu"

        str = str.replaceAll("(.)\\1+","$1");  // $ 表示引用正则表达式中的第一组内容

// 4. 获取
    //  正则表达式对应的类 Pattern
    // 4.1 首先将正则规则封装成对象
    // 4.2 通过正则对象得到 Matcher(匹配器) 对象
    // 4.3 通过匹配器对象的方法对字符串进行操作.

    // 示例: 获取下列字符串中字符长度为 3 的字符串
        String str = "da jia hao,ming tian bu fang jia!";

    // 定义规则
        String regex = "\\b[a-z]{3}\\b";  // 其中 \\b 表示单词边界

    // 将正则规则封装成对象
        Pattern p = Pattern.compile(regex);

    // 通过正则对象的 matcher 方法与字符串相关联, 获取匹配器对象 Matcher
        Matcher m = p.matcher("str");

    // 使用 matcher 对象的方法对字符串进行操作
    // 既然获取三个字母所组成的单词
    // 即查找, 使用 find() 方法, 该方法只能查找一次, 返回结果为布尔值
        while(m.find()){
            System.out.println(m.group());  // 获取匹配到的结果
        }


// 综合练习: ip 地址排序
    // "192.168.10.34 127.0.0.1 3.3.3.3 105.70.11.55"

    public static void test(){

        String ip_str = "192.168.10.34 127.0.0.1 3.3.3.3 105.70.11.55";

        // 为了让 ip 可以按照字符串顺序比较, 只要让 ip 的每一段位数相同,
        // 所以, 补零. 按照每一位所需做多 0 进行补充. 每一段都加两个 0
            ip_str = ip_str.replaceAll("(\\d+)", "00$1");

        // 然后每一段保留数字 3 位
            ip_str = ip_str.replaceAll("0*(\\d{3})","$1");

        // 将 ip 地址切出, 切出结果为 String 类型数组
            String[] ips = ip_str.split(" +");  // 以一次(或多次)空格切出

        // 将每个 ip 地址取出, 放入 TreeSet 集合中比较

            TreeSet<String> ts = new TreeSet<String>();
            for(String ip : ips){
                ts.add(ip);
            }

            for(String ip : ts){
                System.out.println(ip.replaceAll("0*(\\d+)","$1"));
            }
    }
  • 捕获组

1222878-20170915081748969-1599702648.png



参考资料

转载于:https://www.cnblogs.com/linkworld/p/7524375.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值