zoukankan      html  css  js  c++  java
  • 正则表达式

    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)
  • 相关阅读:
    互联网预言大神:凯文·凯利——预测未来的12个趋势
    仅有算法远远不够:AI突破下一站,需要对硬件重新审视
    软件开发中经常使用的5种设计模式
    强化学习到底是什么,它如何运作?
    2020年网络安全的六大经验教训
    选择困难终结者:不同问题之下的机器学习算法
    为什么物联网如此重要?
    Pku3080 Blue Jeans
    pku1734 Musical Theme
    [Usaco2006 Dec]Milk Patterns
  • 原文地址:https://www.cnblogs.com/linkworld/p/7524375.html
Copyright © 2011-2022 走看看