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