【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);
        
    }
}
原文地址:https://www.cnblogs.com/frankruby/p/13678350.html