zoukankan      html  css  js  c++  java
  • <<Java | Java正则表达式 | 学习总结>>

    1.什么是正则表达式?

    Regex代表Regular Express。正则表达式是对字符串操作的一种逻辑公式,用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。

    2.正则表达式用来做什么?

    给定一个正则表达式和另一个字符串,我们可以达到如下的目的:

    1. 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”):
    2. 可以通过正则表达式,从字符串中获取我们想要的特定部分。

    3.正则表达式基本语法

    字符
        x 字符 x。举例:'a'表示字符a
        \ 反斜线字符。
        
     新行(换行)符 ('u000A') 
        
     回车符 ('u000D')
        
    字符类
        [abc] a、b 或 c(简单类) 
        [^abc] 任何字符,除了 a、b 或 c(否定) 
        [a-zA-Z] a到 z 或 A到 Z,两头的字母包括在内(范围) 
        [0-9] 0到9的字符都包括
        
    预定义字符类
        . 任何字符。我的就是.字符本身,怎么表示呢? .
        d 数字:[0-9]
        D 非数字:[^d]/[^0-9]
        w 单词字符:[a-zA-Z_0-9]
       W 非字符[^w]
    
    边界匹配器
        ^ 行的开头 
        $ 行的结尾 
         单词边界, 就是不是单词字符的地方。
        
    Greedy 数量词 
        X? X,一次或一次也没有
        X* X,零次或多次
        X+ X,一次或多次
        X{n} X,恰好 n 次 
        X{n,} X,至少 n 次 
        X{n,m} X,至少 n 次,但是不超过 m 次 
     运算符 
      XY       X后跟 Y 
      X|Y   X 或 Y 
      (X)   X,作为捕获组

    4.正则表达式匹配,切割,替换,获取

    package cn.itcast.regex.demo;
    
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    public class RegexDemo {
    
        public static void main(String[] args) {
            /*
             * 1.匹配
             * 
             * 2.切割
             * 
             * 3.替换
             * 
             * 4.获取
             */
            functionDemo_1();
            functionDemo_2();
            functionDemo_3();
            functionDemo_4();
        }
        // 1匹配
        public static void functionDemo_1() {
            String tel = "15800001111";
    
            String regex = "1[358]\d{9}";
    
            boolean b = tel.matches(regex);
            System.out.println(tel + ":" + b);
        }
        // 2切割
        public static void functionDemo_2() {
            String str = "zhangsanttttttttxiaoqiangmmmmmmmmmzhaoliu";
    
            String[] names = str.split("(.)\1+");// str.split("\.");
    
            for (String name : names) {
                System.out.println(name);
            }
        }
        // 3替换
        public static void functionDemo_3() {
            String str = "zhangsanttttttttxiaoqiangmmmmmmmmmzhaoliu";
    
            str = str.replaceAll("(.)\1+", "$1");
    
            System.out.println(str);
    
            String tel = "15800001111";
            tel = tel.replaceAll("(\d{3})\d{4}(\d{4})", "$1****$2");
            System.out.println(tel);
        }
       // 4获取
        public static void functionDemo_4() {
            String str = "da jia hao,ming tian bu fang jia!";
    
            String regex = "\b[a-z]{3}\b";
    
            // 1.将正则表达式封装成对象
            Pattern p = Pattern.compile(regex);
            // 2.通过正则对象获取匹配器对象
            Matcher m = p.matcher(str);
    
            while (m.find()) {
                System.out.println(m.group());
            }
        }
    }

     正则表达式的三个实例:

    package cn.itcast.regex.test;
    
    import java.util.Iterator;
    import java.util.TreeSet;
    
    public class RegexTest {
    
        /*
         * 1.治疗口吃:我我...我我...我我我要...要要要要....要要要..学学学学学学。。。学学学编编.....................编程程.
         * 2.对ip地址排序. 
         * 3.对邮件地址校验.
         */
        public static void main(String[] args) {
            test_3();
        }
    
        public static void test_1() {
            String str = "我我...我我...我我我要...要要要要....要要要" + "..学学学学学学...学学学编编.....................编程程";
            // 去掉.
            str = str.replaceAll("\.", "");
            System.out.println(str);
            // 去掉叠词
            str = str.replaceAll("(.)\1+", "$1");
            System.out.println(str);
        }
    
        /*
         * 192.168.10.34 127.0.0.1 105.70.11.55
         */
        public static void test_2() {
            
            String ip_str = "192.168.10.34   127.0.0.1   3.3.3.3  105.70.11.55";
            ip_str = ip_str.replaceAll("(\d+)", "00$1");
            System.out.println(ip_str);
    
            ip_str = ip_str.replaceAll("0*(\d{3})", "$1");
            System.out.println(ip_str);
    
            String[] ips = ip_str.split(" +");
            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"));
            }
        }
    
        // 对邮件地址校验
        public static void test_3() {
            
            String mail = "abc1@sina.com";
            
            String regex = "[a-zA-Z\d_]+@[a-zA-Z\d_]+(\.[a-zA-Z]{2,3})";
            
            boolean b = mail.matches(regex);
            
            System.out.println(mail+":"+b);
        }
    }
  • 相关阅读:
    初识Tensorboard
    sql优化的几种方法
    nginx+ffmpeg+jwplayer
    jwplayer播放器
    详解spring 每个jar的作用
    RabbitMQ安装
    Migration 使用方法
    VisualSVN server 启用日志编辑
    nodejs prefix(全局)和cache(缓存)windows下设置
    python3 eval字符串str 转字典dict
  • 原文地址:https://www.cnblogs.com/ow0843/p/9668182.html
Copyright © 2011-2022 走看看