Java正则表达式

Java 正则表达式用于匹配字符串的某些模式。Java 提供了 java.util.regex 包来支持正则表达式操作,主要包含以下三个类:

  • Pattern 类:一个正则表达式的编译表示。
  • Matcher 类:一个引擎,使用正则表达式进行模式匹配操作。
  • PatternSyntaxException 类:表示一个正则表达式模式中的语法错误。
一、Pattern 类的常用方法:
1.compile(String regex, int flag)
  • 编译给定的正则表达式并创建一个带有指定标志的模式对象。常用标志包括 Pattern.CASE_INSENSITIVE(忽略大小写),Pattern.MULTILINE(多行模式),Pattern.DOTALL(使.匹配包括换行符在内的所有字符)等。
  • 示例:
  • Pattern pattern = Pattern.compile("a*b", Pattern.CASE_INSENSITIVE);
2.split(CharSequence input,int limit)
  • 根据模式拆分输入序列并返回拆分结果的字符串数组,并限制数组的长度

  • 示例:

  • String[] result = pattern.split("one,two,three",2);

3.pattern()
  • 返回模式的字符串表示。

  • 示例:

  • String regex = pattern.pattern();

4.flags()
  • 返回用于编译此模式的匹配标志。

  • 示例:

  • int flags = pattern.flags();

5.quote(String s)
  • 返回给定字符串的字面值模式字符串(即,将字符串中的特殊字符转义)。

  • 示例:

  • String quoted = Pattern.quote("a*b");

代码实现

import java.util.regex.*;

public class PatternExample {
    public static void main(String[] args) {
        // 编译一个正则表达式
        Pattern pattern = Pattern.compile("a*b");

        // 创建一个 Matcher 对象
        Matcher matcher = pattern.matcher("aaaaab");

        // 检查完全匹配
        if (matcher.matches()) {
            System.out.println("完全匹配");
        }

        // 重新创建 Matcher 对象
        matcher = pattern.matcher("aaaaab");

        // 检查从开头匹配
        if (matcher.lookingAt()) {
            System.out.println("从开头匹配");
        }

        // 重新创建 Matcher 对象
        matcher = pattern.matcher("xxaaaabxx");

        // 查找匹配的子串
        while (matcher.find()) {
            System.out.println("找到匹配的子串: " + matcher.group());
        }

        // 使用 split 方法
        String[] result = pattern.split("one,aab,two,aab,three");
        for (String str : result) {
            System.out.println("拆分结果: " + str);
        }

        // 使用 quote 方法
        String quoted = Pattern.quote("a*b");
        System.out.println("转义后的字符串: " + quoted);
    }
}
二、Matcher 类的常用方法:

       

1.matches()
  • 尝试将整个输入序列与模式匹配。
  • 返回值:布尔值,表示是否匹配成功。
  • 示例:
boolean matches = matcher.matches();
2.lookingAt()
  • 尝试将输入序列从头开始与模式匹配。
  • 返回值:布尔值,表示是否匹配成功。
  • 示例:
boolean lookingAt = matcher.lookingAt();
3.find(int start)
  • 尝试查找输入序列中与模式匹配的下一个子序列。
  • int start:表示指定位置的索引  不用索引就是查找整个序列
  • 返回值:布尔值,表示是否找到匹配。
  • 示例:
boolean found = matcher.find(10);
4.group(int group)
  • 返回前一次匹配操作中找到的匹配子序列。
  • 参数表示指定捕获组
  • 返回值:字符串,表示匹配的子序列。
  • 示例:
String group = matcher.group(1);
5.groupCount()
  • 返回匹配器模式中的捕获组数。
  • 返回值:整数,表示捕获组的数量。
  • 示例:
int groupCount = matcher.groupCount();
6.start(int group)
  • 返回前一次匹配操作中匹配子序列的起始索引。
  • 参数表示指定捕获组的起始索引
  • 返回值:整数,表示匹配子序列的起始索引。
  • 示例:
int start = matcher.start();

int startindex=matcher.satrt(1);
7.end(int group)
  • 返回前一次匹配操作中匹配子序列的结尾索引。
  • 参数表示指定捕获组的结尾索引
  • 返回值:整数,表示匹配子序列的结尾索引。
  • 示例:
int end = matcher.end();

int endindex=matcher.end(1);
8.replaceAll(String replacement)
  • 替换输入序列中所有与模式匹配的子序列。
  • 返回值:字符串,表示替换后的字符串。
  • 示例:
String result = matcher.replaceAll("替换的字符");

 

代码示例
import java.util.regex.*;

public class MatcherExample {
    public static void main(String[] args) {
        // 编译一个正则表达式
        Pattern pattern = Pattern.compile("(\\d{3})-(\\d{2})-(\\d{4})");

        // 创建一个 Matcher 对象
        Matcher matcher = pattern.matcher("123-45-6789");

        // 检查完全匹配
        if (matcher.matches()) {
            System.out.println("完全匹配");
            System.out.println("Group 1: " + matcher.group(1));
            System.out.println("Group 2: " + matcher.group(2));
            System.out.println("Group 3: " + matcher.group(3));
        }

        // 重新创建 Matcher 对象
        matcher = pattern.matcher("xxx123-45-6789yyy");

        // 查找匹配的子串
        while (matcher.find()) {
            System.out.println("找到匹配的子串: " + matcher.group());
            System.out.println("起始索引: " + matcher.start());
            System.out.println("结束索引: " + matcher.end());
        }

        // 使用 replaceAll 方法
        matcher = pattern.matcher("123-45-6789 and 987-65-4321");
        String result = matcher.replaceAll("***-**-****");
        System.out.println("替换后的字符串: " + result);
    }
}
三、 正则表达式基本用法
1.创建Pattern对象

可以使用 Pattern.compile() 方法创建一个 Pattern 对象:

Pattern pattern = Pattern.compile("a*b");
2. 创建 Matcher 对象 

使用 Pattern 对象的 matcher() 方法创建一个 Matcher 对象:

Matcher matcher = pattern.matcher("aaaaab");
3. 进行匹配操作

使用 Matcher 对象的各种方法来进行匹配操作:

boolean matches = matcher.matches(); // 完全匹配
boolean lookingAt = matcher.lookingAt(); // 从字符串的开始匹配
boolean find = matcher.find(); // 查找字符串中符合的子串
代码演示

以下是一个完整的示例,展示如何使用正则表达式进行字符串匹配:

import java.util.regex.*;

public class RegexExample {
    public static void main(String[] args) {
        // 创建一个正则表达式 Pattern 对象
        Pattern pattern = Pattern.compile("a*b");

        // 创建一个 Matcher 对象
        Matcher matcher = pattern.matcher("aaaaab");

        // 检查完全匹配
        if (matcher.matches()) {
            System.out.println("完全匹配");
        }

        // 重新创建 Matcher 对象(因为 matches() 方法会消费掉匹配结果)
        matcher = pattern.matcher("aaaaab");

        // 检查从开头匹配
        if (matcher.lookingAt()) {
            System.out.println("从开头匹配");
        }

        // 重新创建 Matcher 对象
        matcher = pattern.matcher("xxaaaabxx");

        // 查找匹配的子串
        while (matcher.find()) {
            System.out.println("找到匹配的子串: " + matcher.group());
        }
    }
}
四、参考文档 
      转载网址:java.util.regex (Java Platform SE 8 )  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值