Fork me on GitHub

正则表达式

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

匹配规则

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

// 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"));
            }
    }
  • 捕获组


**参考资料** - [JavaSE 基础视频(毕向东)](https://www.bilibili.com/video/av3133827/#page=8) - [JDK 1.6 中文文档](http://tool.oschina.net/apidocs/apidoc?api=jdk-zh) - [Java替换指定字符串前后的指定字符(类似于String的trim()方法](https://blog.csdn.net/ylchou/article/details/79548074) - [What is a good alternative of LTRIM and RTRIM in Java?](https://stackoverflow.com/questions/15567010/what-is-a-good-alternative-of-ltrim-and-rtrim-in-java)
posted @ 2017-09-15 08:18  小a的软件思考  阅读(243)  评论(0编辑  收藏  举报