java正则表达式细节

本文深入探讨Java正则表达式的使用,从Pattern与Matcher类的配合,到字符类、数量词、预定义字符类、边界匹配器的详解,再到实战示例如字符串替换、拆分、find与group方法的应用,全面解析Java正则表达式的强大功能。
摘要由CSDN通过智能技术生成

java正则表达式
java正则表达式通过java.util.regex包下的Pattern类与Matcher类实现(建议在阅读本文时,打开java API文档,当介绍到哪个方法时,查看java API中的方法说明,效果会更佳).
1.Pattern类用于创建一个正则表达式,也可以说创建一个匹配模式,它的构造方法是私有的,不可以直接创建,但可以通过Pattern.complie(String regex)简单工厂方法创建一个正则表达式。
2. Matcher类的构造方法也是私有的,不能随意创建,只能通过Pattern.matcher(CharSequence input)方法得到该类的实例.
Pattern类只能做一些简单的匹配操作,要想得到更强更便捷的正则匹配操作,那就需要将Pattern与Matcher一起合作.Matcher类提供了对正则表达式的分组支持,以及对正则表达式的多次匹配支持.
Java代码示例:
//编译正则表达式
Pattern p = Pattern.compile(“ab”);
//匹配一个字符串
Matcher m = p.matcher(“aa”);
//是否匹配
boolean b = m.matches();
System.out.println(b);//false

package com.feisi.test;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {
public static void main(String[] args) {

    //一、字符类
    //判断str1是否与正则表达式匹配
    String str1 = "h";
    
    //[abc]:其中任意一个字符,是否和str1匹配
    boolean b1 = str1.matches("[abc]");
    System.out.println(b1);//false

    //[^abc]:除[]里面的所有符号,是否和str1匹配
    boolean b2 = str1.matches("[^abc]");
    System.out.println(b2);//true

    //[a-z A-Z]:包括a-z或A-Z范围
    boolean b3 = str1.matches("[a-z A-Z ]");
    System.out.println(b3);//true

    //[a-d[m-p]]:[a-d][m-p]的并集
    boolean b4 = str1.matches("[a-d[m-p]]");
    System.out.println(b4);//false

    //[a-z&&[def]]:交集
    boolean b5 = str1.matches("[a-z&&[def]]");
    System.out.println(b5);//false

    //[a-z&&[^bc]]:a-z,除了bc
    boolean b6 = str1.matches("[a-z&&[^bc]]");
    System.out.println(b6);//true

    //[a-z&&[^m-p]]:a到z,而非m到p
    boolean b7 = str1.matches("[a-z&&[^m-p]]");
    System.out.println(b7);//true

   //二、数量词
    //X?:出现1次或者0次就会返回true
    String str2 = "aaa";
    boolean b21 = str2.matches("[a-c]?");
    System.out.println(b21);//true
    
    //x*:出现零次-多次就会返回true
    boolean b22 = str2.matches("[abc]*");
    System.out.println(b22);//true

    // X+ :出现一次或多次
    boolean b23 = str2.matches("[a-d]+");
    System.out.println(b23);//true  str2在[a-d]中出现了多次

    // X{n}:出现恰好 n 次
    boolean b24 = str2.matches("[a-d]{3}");
    System.out.println(b24);//true  str2在[a-d]中恰好出现了3次

    // X{n,} :出现至少 n 次
    boolean b25 = str2.matches("[a-d]{2,}");
    System.out.println(b25);//true  str2在[a-d]中出现了3次,满足至少出现了2次

    // X{n,m}:出现至少 n 次,但是不超过 m 次
    boolean b26 = str2.matches("[a-d]{3,5}");
    System.out.println(b26);//true  str2在[a-d]中出现了3次,满足至少出现了2次,但不超过5次

    //出现多个字符的时候
   String str22 = "ab";
   boolean b27 = str22.matches("[a-z][a-z]");
   System.out.println("==="+b27);//true   

//三、预定义字符类

    //1.\d:可以匹配0-9的数字,如果是多个数字,就要在后面加长度
    String str31 = "123";
    boolean b31 = str1.matches("\\d{3}");
    System.out.println(b31);//true

    //2.\D:匹配非数字: [^0-9]
    String str32 = "hello";
    boolean b32 = str2.matches("\\D{5}");
    System.out.println(b32);//true

    //3.\s :匹配空白字符:[ \t\n\x0B\f\r]
    String str33 = " ";
    boolean b33 = str3.matches("\\s");
    System.out.println(b33);//true

    //4.\S:匹配非空白字符:[^\s]
    String str34 ="hello";
    boolean b34 = str34.matches("\\S{5}");
    System.out.println(b34);//true

    //5.\w:匹配单词字符:[a-zA-Z_0-9]
    String str35 ="hello";
    boolean b35 = str35.matches("\\w{5}");
    System.out.println(b35);//true

    //6.\W:匹配非单词字符:[^\w]
    String str36 ="123";
    boolean b36 = str36.matches("\\W{3}");
    System.out.println(b36);

//四、边界匹配器类

    // 1.^:匹配行的开头
    String str41 = "1";
    boolean b41 = str41.matches("^[123]");
    System.out.println(b41);//true 1是正则表达式[123]的开头,所以是true

    //2.$ 行的结尾
    String str42 = "3";
    boolean b42 = str42.matches("[123]$");
    System.out.println(b42);//true 3是正则表达式[123]的结尾,所以是true

    //3.\b 单词边界
    String str43 = "h";
    boolean b43 = str43.matches("[hello]\\b");
    System.out.println(b43);//true h或者o是正则表达式[hello]的边界,所以是true

/五、汉字正则表达

    //把多个,用一个,来代替
    String str51 = "hello ,,123,, 456";
    String str52 = str51.replaceAll(",+"," ");
    System.out.println(str52);//hello  123  456

/六、拆分

     int sum = 0;
    String str = "1+2+3+4+5";
    
    //根据+把字符串分解
    String []arry = str.split("\\+");
    
    for(int i =0;i<arry.length;i++){
        //字符转换成整型
        int num = Integer.parseInt(arry[i]);
        sum+=num;
    }
    System.out.println(sum);//15
    
     //应用:
      String str2 = "我的QQ是:456456 我的电话是:0532214 我的邮箱是:aaa123@aaa.com";
      String []arry2 = str2.split(" ");
      for(String num:arry2){
          System.out.println(num);
      }
      //输出:
      我的QQ是:456456
      我的电话是:0532214
      我的邮箱是:aaa123@aaa.com

//七、find()方法与group()方法

    Pattern p = Pattern.compile("[a-z]{1,3}");//编译
    Matcher m =p.matcher("javabC");//匹配
    
    //第一次匹配
    boolean b1 = m.find();
    System.out.println(b1);//true
    String c1= m.group();//返回由以前匹配操作所匹配的输入子序列。
    System.out.println(c1);//输出jav

    //第二次匹配
    boolean b2 = m.find();
    System.out.println(b2);

    String c2= m.group();//返回由以前匹配操作所匹配的输入子序列。
    System.out.println(c2);//输出ab

    //第三次匹配
    boolean b3 = m.find();
    System.out.println(b3);//false
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值