2022-08-12 学习笔记 day35-JavaSE-正则表达式

正则表达式

正则表达式语法

限定符

在这里插入图片描述

字符类

在这里插入图片描述

元字符

在这里插入图片描述

贪婪匹配与懒惰匹配

  1. 贪婪匹配(默认):
    • 什么是贪婪匹配:在整个表达式匹配成功的前提下,尽可能多的匹配。
  2. 懒惰匹配:
    • 什么是懒惰匹配:在整个表达式匹配成功的前提下,尽可能少的匹配。
    • 使用方式:在限定符后面加“?”
    • 注意:非贪婪模式只被部分NFA引擎所支持。

在线测试

测试正则表达式

在Java中使用正则表达式

Pattern类

Pattern:正则表达式的编译表示形式

  1. 包路径:java.util.regex.Pattern
  2. 继承关系:Pattern ----> Object
  3. 静态方法
静态方法功能
static boolean matches(Stirng regx, String input)判断input是否与regx这个正则表达式全字匹配
static Pattern compile(String)返回参数字符串表示的正则表达式的编译表示形式(Pattern)
  1. 实例方法
实例方法功能
Match matcher(CharSequence)基于该Pattern返回的一个Match(匹配器)
Stirng pattern()返回此Pattern实例表示的正则表达式的字符串表示形式(String)
String[] split(CharSequence)根据Pattern实例拆分CharSequence实例,并返回一个Stirng[]

疑问:拆分字符串时,可以使用单词边界进行拆分么?
不能,因为单词边界指的是是一个(单词与非单词之间的)位置,而不是指一个字符

Matcher类

Matcher:通过解释 Pattern 对 character sequence 执行匹配操作的引擎

简单来说,Matcher中保存了Pattern(正则表达式编译表示形式)与CharSequence(被匹配的字符串)

  1. 包路径:java.util.regex.Matcher
  2. 继承关系:Matcher ----> Object
    在这里插入图片描述

Pattern与Matcher的使用

 @Test
    public void testPattern() {

        // 全字匹配
        // 1. Pattern的静态方法matches()
        boolean isNums = Pattern.matches("\\d+","245654456");
        System.out.println("是否全是数字:" + isNums); //true
        // 2. Matcher的实例方法
        boolean isLetters = Pattern.compile("[a-zA-Z]+").matcher("abdidioqwgq").matches();
        System.out.println("是否全是字母:" + isLetters);  //true

        // Matcher匹配器的应用
        Matcher matcher = Pattern.compile("\\W").matcher("I我love爱you你");
        // 将匹配到的所有的非单词字符替换成空格
        System.out.println(matcher.replaceAll(" ")); //I love you
        // 使用新的Pattern --> 匹配所有的单词字符
        matcher.usePattern(Pattern.compile("\\w"));
        // 将匹配到的所有单词删除
        System.out.println(matcher.replaceAll("")); //我爱你
        // 将匹配到的第一个单词字符删除
        System.out.println(matcher.replaceFirst("")); //我love爱you你
        // 获取匹配个数
        // 重设匹配器
        matcher.reset();
        int count = 0;
        while (matcher.find()) {
            count++;
        }
        System.out.println("正则表达式\"" + matcher.pattern() + "\"对字符串\"I我love爱you你\"的匹配次数:" + count); //正则表达式"\w"对字符串"I我love爱you你"的匹配次数:8

    }

String类正则表达式的应用

@Test
    public void testString() {
        // 1. String[] split(String regex) ---> 通过正则表达式对字符串进行拆分
        String[] split = "a1b2c3d4e5".split("\\d");
        System.out.println(Arrays.toString(split)); // [a, b, c, d, e]

        // 2. String[] split(String regex, int limit) 通过正则表达式对字符串进行拆分,limit指定拆分最大个数
        String[] split2 = "a1b2c3d4e5".split("\\d",2);
        System.out.println(Arrays.toString(split2)); // [a, b2c3d4e5]

        // 3. boolean matches(String regex) ----> 判断当前字符串实例是否与正则全字匹配
        System.out.println("abcde".matches("\\w*"));  // true

        // 4. String replaceAll(String regex, String replacement) ----> 将正则匹配到的内容替换为指定内容
        System.out.println("123".replaceAll("\\d", "数字")); // 数字数字数字

        // 5. String replaceFirst(String regex, String replacement) ----> 将正则匹配到的第一个内容替换为指定内容
        System.out.println("123".replaceFirst("\\d", "数字1")); // 数字123

    }
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值