zoukankan      html  css  js  c++  java
  • 【Java正则表达式 01】

    一、正则表达式概述

    1、正则表达式用于操作字符数据

    2、通过举例初步了解正则

    * 定义一个功能对qq号进行校验
    * 需求:长度5~15位,只能是数字,开头不能为0

    ----->一般的写法<------

    package com.JavaZhengZe;
    
    /**
     * @Author wufq
     * @Date 2020/9/16 11:06
     *
     * 正则表达式
     *
     * 正则表达式用于操作字符串数据
     */
    public class RegexDemo {
        public static void main(String[] args){
            String qq = "45668676";
           checkQQ(qq);
         
        }
    
        /*
        * 定义一个功能对qq号进行校验
        * 需求:长度5~15位,只能是数字,开头不能为0
        * */
    
        public static void checkQQ(String qq){
            int len = qq.length();
            if(len>=5&&len<=15){
                if(!qq.startsWith("0")){
                    try {
                        long l = Long.parseLong(qq);
                        System.out.println(qq+"   正确的!");
                    } catch (NumberFormatException e) {
                        System.out.println(qq+":含有非法数字!");
                    }
                }else {
                    System.out.println(qq+"  qq号开头不能为0");
                }
            }else{
                System.out.println("长度只能为5~15位");
            }
        }
    }

    ------>利用正则的写法<------

    String类内有一个matches方法

    boolean matches(String regex)
              告知此字符串是否匹配给定的正则表达式。

    package com.JavaZhengZe;
    
    /**
     * @Author wufq
     * @Date 2020/9/16 11:06
     *
     * 正则表达式
     *
     * 正则表达式用于操作字符串数据
     */
    public class RegexDemo {
        public static void main(String[] args){
            String qq = "45668676";
    
            String regex = "[1-9][0-9]{4,14}";//正则表达式
            boolean b = qq.matches(regex);
            System.out.println(qq+"::"+b);
        }
    
        /*
        * 定义一个功能对qq号进行校验
        * 需求:长度5~15位,只能是数字,开头不能为0
        * */
    }

    通过以上两段代码的比较发现:通过一些特定的符号来体现,所以我们为了掌握正则表达式。必须要学习一些符号。

    虽然简化了,但是阅读性差。

    二、常见的规则

    \ 反斜线字符

    制表符

    回车符

    新行符

    f 换页符

    [abc] a、b 或 c(简单类)

    [^abc] 任何字符,除了 a、b 或 c(否定)

    .   任何字符(与行结束符可能匹配也可能不匹配)

    *  表示匹配0-无穷

    +  表示匹配1-无穷

    ? 表示放在其他字符后面表示前面的字符可以有,也可以没有,或者放在*、+后面表示匹配尽可能少的字符
    d   数字:[0-9]
    D  非数字: [^0-9]
    (X) X,作为捕获组

    :表示字母数字与非字母数字的边界,     非字母数字与字母数字的边界。

    B:表示字母数字与(非非)字母数字的边界,非字母数字与非字母数字的边界。

    三、正则常见的功能

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

    1)匹配

      其实使用的就是String类中的matches方法

    2)切割

      其实使用的就是String类中的split方法

    3)替换

    4)获取

    package com.JavaZhengZe;
    
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    /**
     * @Author wufq
     * @Date 2020/9/17 10:40
     *
     * 正则表达式的常见功能
     * 1、匹配
         其实就是使用String类中的matches方法
     * 2、切割
         其实就是使用String类中的split方法
     * 3、替换
         其实使用的就是string类中的replaceAll()方法
     * 4、获取
     *    //将正则规则进行对象的封装
     *    Pattern p = Pattern.compile("a*b")
     *    //通过正则对象的matcher方法字符串相关联。获取要对字符串操作的匹配器对象Matcher
     *    Matcher m = p.matcher("aaaaab");
     *    //通过Matcher匹配器对象的方法对字符串进行操作
     *    boolean b = m.matches();
     */
    public class RegexDemo01 {
        public static void main(String[] args){
    //        functionDemo_1();
    //        functionDemo_2();
    //        functionDemo_3();
            functionDemo_4();
        }
    
        /*获取*/
        public static void functionDemo_4() {
    
            String str = "da jia hao,ming tian bu shang ban";
            String regex = "\b[a-z]{3}\b";  // ---> [a-z]{3}:a-z三位数  :表示字母数字与非字母数字的边界,非字母数字与字母数字的边界。
    
            Pattern p = Pattern.compile(regex);
            Matcher m = p.matcher(str);
    
            System.out.println(str);
            //查找匹配
            while (m.find()){
    
                System.out.println(m.group());
               System.out.println(m.start()+"::"+m.end());
            }
    
        }
    
        /*替换*/
        public static void functionDemo_3() {
            String str = "zhangsan###lisi----zhaoletttwangwu";
            str = str.replaceAll("(.)\1+","###"); //所有的重复的--- ttt替换成###
    
            //把--- ttt替换成一个- 一个t
            str = str.replaceAll("(.)\1+","$1");//执行结果:zhangsan#lisi-zhaoletwangwu
    
            String tel = "15868761111";//转换成158****1111
    
            tel = tel.replaceAll("(\d{3})(\d{4})(\d{4})","$1****$3"); //分成三个组,(d{3})是一个组,后面两个是两个组,然后替换时用$1 $3确定
            System.out.println(tel);
        }
    
    
        /*匹配*/
        public static void functionDemo_1() {
    
            String tel = "18781098686";
    //        String match = "1[358][0-9]{9}";
            String match = "1[358]//d{9}"; //第一个数字取1第二个数字取3或者5或者8第三个数字取0~9第四个数字取9位
            Boolean b = tel.matches(match);
            System.out.println(tel+"::"+b);
        }
    
        /*切割*/
        public static void functionDemo_2() {
            String str = "zhangsan###lisi----zhaoletttwangwu";
            String[] names = str.split("(.)\1+"); //(X)捕获组
            for(String name:names){
                System.out.println(name);
            }
        }
    
    }

    四、练习1

    package com.JavaZhengZe;
    
    /**
     * @Author wufq
     * @Date 2020/9/17 17:51
     */
    public class RegexDemo02 {
        public static void main(String[] args){
    
            /*
            * 1、治疗口吃:我我....要要要要要要要....学学学....编编编程
           
            * */
    
            test_1();
        }
    
        public static void test_1() {
            String str = "我我....要要要要要要要....学学学....编编编程";
    
            //替换.
            str = str.replaceAll("\.+","");
            System.out.println(str);
            //替换叠词
            str=str.replaceAll("(.)\1+" , "$1");
            System.out.println(str);
            
        }
    }
  • 相关阅读:
    Nginx的编译,和简单的配置问题
    项目课DNS主域名解析服务器(四)
    项目课DHCP服务(三)
    项目课PXE自动装机(二)
    Nginx 详细讲解
    ansible批量管理工具的搭建与简单的操作
    SUID,SGID,SBIT这些到底是什么
    密码截取
    分治和递归的算法实现求数组A[n]中的前k个最大数
    回溯法实现求1n个自然数中r个数的组合
  • 原文地址:https://www.cnblogs.com/frankruby/p/13678350.html
Copyright © 2011-2022 走看看