面试系列 - 正则表达式详解

目录

一、正则表达式

二、java 正则表达式详解 

正则表达式(Regular Expression),通常称为正则或Regex,是一个用于匹配文本模式的强大工具。正则表达式由一系列字符和特殊字符组成,用于定义搜索模式。它可以用于字符串匹配、搜索、替换和验证,是文本处理和模式匹配的常见工具。

一、正则表达式

一些常见的正则表达式元字符和用法:

  1. 普通字符: 正则表达式中的大多数字符(字母、数字、标点符号等)表示它们自己。例如,正则表达式abc匹配字符串中的字符"abc"。

  2. 点号 . 表示匹配任意单个字符(除了换行符)。例如,正则表达式a.b匹配字符串中的"aab"、"acb"等。

  3. 字符类 [...] 用于匹配字符类中的任何一个字符。例如,正则表达式[aeiou]匹配任何一个元音字母。

  4. 反义字符类 [^...] 用于匹配不在字符类中的任何一个字符。例如,正则表达式[^0-9]匹配任何一个非数字字符。

  5. 重复限定符 {} 用于指定重复次数。例如,正则表达式a{2}匹配两个连续的字母"a"。

  6. 星号 * 表示匹配前面的字符零次或多次。例如,正则表达式ab*c匹配"ac"、"abc"、"abbc"等。

  7. 加号 + 表示匹配前面的字符一次或多次。例如,正则表达式ab+c匹配"abc"、"abbc"等,但不匹配"ac"。

  8. 问号 ? 表示匹配前面的字符零次或一次。例如,正则表达式colou?r匹配"color"和"colour"。

  9. 选择符 | 用于分隔多个选择项,匹配其中任何一个。例如,正则表达式cat|dog匹配"cat"或"dog"。

  10. 转义字符 \ 用于转义特殊字符,使其匹配字面值。例如,正则表达式\.匹配实际的句点字符。

  11. 开始锚点 ^ 表示匹配字符串的开头。例如,正则表达式^abc匹配以"abc"开头的字符串。

  12. 结束锚点 $ 表示匹配字符串的结尾。例如,正则表达式xyz$匹配以"xyz"结尾的字符串。

  13. 分组 () 用于将模式的一部分分组,以便进行重复、捕获或其他操作。例如,正则表达式(abc)+匹配"abc"、"abcabc"等。

  14. 捕获组 () 用于捕获匹配的子字符串,以便后续引用或处理。例如,正则表达式(ab)c匹配"abc",并捕获"ab"。

  15. 非捕获组 (?:...) 用于分组但不捕获匹配的子字符串。例如,正则表达式(?:ab)+匹配"ab"、"abab"等,但不捕获。

  16. 前向匹配 (?=...) 用于查找满足条件的前缀。例如,正则表达式x(?=y)匹配字符串中的"x",但只有在后面跟着"y"时才匹配成功。

  17. 反向匹配 (?<=...) 用于查找满足条件的后缀。例如,正则表达式(?<=x)y匹配字符串中的"y",但只有在前面有"x"时才匹配成功。

正则表达式是一个强大的文本处理工具,可以用于字符串的高级操作和模式匹配。学习和掌握正则表达式需要一些时间和练习,但它对于处理文本数据和进行字符串操作是非常有价值的。

二、java 正则表达式详解 

正则表达式(Regular Expression,简称正则或Regex)是一种强大的文本匹配和搜索工具,Java也提供了对正则表达式的支持。Java使用java.util.regex包来处理正则表达式,你可以在Java中使用正则表达式来执行字符串匹配、搜索、替换等操作。

以下是一些常见的Java正则表达式操作和详解:

  1. 正则表达式的基本语法: 在Java中,正则表达式可以由普通字符和特殊字符组成,特殊字符通常用来表示模式。例如,abc是一个简单的正则表达式,用于匹配字符串中的字符"abc"。

  2. Pattern 类: java.util.regex.Pattern类用于表示正则表达式的编译版本。要创建一个Pattern对象,你需要使用Pattern.compile()方法,将正则表达式字符串作为参数传递。

    Pattern pattern = Pattern.compile("abc");
  3. Matcher 类: java.util.regex.Matcher类用于执行匹配操作。你可以使用Pattern.matcher()方法创建一个Matcher对象,然后使用它执行匹配操作。

    Matcher matcher = pattern.matcher("abcde");
    wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==
  4. matches() 方法: matches()方法用于检查整个输入字符串是否与正则表达式匹配。它返回一个布尔值,表示是否匹配成功。

    boolean isMatch = matcher.matches();
    wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==
  5. find() 方法: find()方法用于查找输入字符串中的下一个匹配子串。它返回一个布尔值,表示是否找到匹配。

    boolean found = matcher.find();
    wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==
  6. group() 方法: group()方法用于获取匹配的子字符串。你可以使用group(0)获取整个匹配的字符串,使用group(1)group(2)等获取捕获组中的子字符串。

    String matchedString = matcher.group();
    wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==
  7. 捕获组: 使用圆括号 () 可以创建捕获组。捕获组允许你从匹配的字符串中提取子字符串。例如,正则表达式(\\d+)-(\\d+)可以用于匹配并捕获形如"123-456"的字符串,并分别提取两个数字。

  8. 预定义字符类: Java正则表达式支持预定义的字符类,如\d(数字)、\w(单词字符)、\s(空白字符)等。例如,\d{3}匹配三个连续的数字。

  9. 边界匹配符: ^ 表示字符串的开始,$ 表示字符串的结束。例如,^abc匹配以"abc"开头的字符串,abc$匹配以"abc"结尾的字符串。

  10. 量词: 量词用于指定重复次数,例如 * 表示零次或多次,+ 表示一次或多次,? 表示零次或一次,{n} 表示恰好重复 n 次,{n,} 表示至少重复 n 次,{n,m} 表示重复 n 到 m 次。

  11. 转义字符: 特殊字符如 .*+() 等在正则表达式中有特殊意义,如果要匹配它们本身,需要使用反斜杠 \ 进行转义。

  12. 分支条件: 使用 | 来表示分支条件,例如 apple|banana 匹配"apple"或"banana"。

以下代码,演示了如何在Java中使用正则表达式进行字符串匹配: 

import java.util.regex.*;

public class RegexExample {
    public static void main(String[] args) {
        String input = "abc123def456";
        String patternString = "\\d+"; // 匹配一个或多个数字

        Pattern pattern = Pattern.compile(patternString);
        Matcher matcher = pattern.matcher(input);

        while (matcher.find()) {
            String matched = matcher.group();
            System.out.println("匹配到: " + matched);
        }
    }
}

 以上示例演示了如何使用正则表达式来匹配字符串中的数字。正则表达式 \\d+ 匹配一个或多个数字,并使用 find() 方法在输入字符串中查找匹配。然后,使用 group() 方法获取匹配的子字符串。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

境里婆娑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值