Java正则匹配字符串

2025年01月28日 Java正则匹配字符串 极客笔记

Java正则匹配字符串

正则表达式是一种强大的工具,用于在字符串中搜索和匹配特定模式的文本。在Java中,我们可以使用java.util.regex包来实现正则表达式的功能。本文将详细介绍Java中正则表达式的用法,包括如何创建正则表达式对象、如何进行匹配和查找等操作。

创建正则表达式对象

在Java中,我们需要使用Pattern类来创建正则表达式对象。Pattern类提供了compile()方法来编译正则表达式并返回一个Pattern对象。我们可以通过调用Pattern对象的matcher()方法获取一个Matcher对象,用于进行匹配操作。

示例代码如下所示:

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

public class RegexDemo {
    public static void main(String[] args) {
        String pattern = "foo";
        String text = "foo bar foo";

        Pattern p = Pattern.compile(pattern);
        Matcher m = p.matcher(text);

        while (m.find()) {
            System.out.println("Found at index " + m.start() + " - " + m.end());
        }
    }
}

在上面的示例中,我们首先定义了一个正则表达式"foo"和一个目标字符串"foo bar foo"。然后我们使用Pattern.compile()方法编译正则表达式,得到一个Pattern对象p。接下来我们使用p.matcher()方法获取一个Matcher对象m,并通过调用m.find()方法进行匹配操作。

运行上面的代码,输出如下所示:

Found at index 0 - 3
Found at index 8 - 11

从输出可以看出,我们成功匹配到了两个字符串”foo”,分别位于索引0至3和8至11。

匹配规则

在Java中,正则表达式的匹配规则遵循Perl正则表达式语法。下面列举了一些常用的正则表达式元字符和修饰符:

  • .:匹配任意字符(除了换行符)
  • ^:匹配目标字符串的开始位置
  • $:匹配目标字符串的结束位置
  • *:匹配0个或多个前面的字符
  • +:匹配1个或多个前面的字符
  • ?:匹配0个或1个前面的字符
  • {n}:匹配恰好n个前面的字符
  • {n,}:匹配至少n个前面的字符
  • {n,m}:匹配至少n个且不超过m个前面的字符
  • []:匹配指定范围内的任意一个字符
  • ():分组,用于提取匹配结果

常见匹配操作

匹配单个字符

我们可以使用.元字符来匹配任意一个字符。下面的示例中,我们匹配了一个单词中的第二个字符:

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

public class RegexDemo {
    public static void main(String[] args) {
        String pattern = ".oo";
        String text = "foo bar zoo";

        Pattern p = Pattern.compile(pattern);
        Matcher m = p.matcher(text);

        while (m.find()) {
            System.out.println("Found at index " + m.start() + " - " + m.end() + ": " + m.group());
        }
    }
}

运行上面的代码,输出如下所示:

Found at index 1 - 4: foo
Found at index 8 - 11: zoo

匹配开头和结尾

我们可以使用^$元字符来匹配目标字符串的开头和结尾。下面的示例中,我们匹配了以”foo”开头和以”foo”结尾的字符串:

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

public class RegexDemo {
    public static void main(String[] args) {
        String pattern1 = "^foo";
        String pattern2 = "foo$";
        String text = "foo bar foo";

        Pattern p1 = Pattern.compile(pattern1);
        Matcher m1 = p1.matcher(text);

        while (m1.find()) {
            System.out.println("Found at index " + m1.start() + " - " + m1.end() + ": " + m1.group());
        }

        Pattern p2 = Pattern.compile(pattern2);
        Matcher m2 = p2.matcher(text);

        while (m2.find()) {
            System.out.println("Found at index " + m2.start() + " - " + m2.end() + ": " + m2.group());
        }
    }
}

运行上面的代码,输出如下所示:

Found at index 0 - 3: foo
Found at index 8 - 11: foo

匹配重复字符

我们可以使用*+?{n}等元字符来匹配重复出现的字符。下面的示例中,我们匹配了任意个数的”o”字符:

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

public class RegexDemo {
    public static void main(String[] args) {
        String pattern = "o+";
        String text = "fooo bar zoo";

        Pattern p = Pattern.compile(pattern);
        Matcher m = p.matcher(text);

        while (m.find()) {
            System.out.println("Found at index " + m.start() + " - " + m.end() + ": " + m.group());
        }
    }
}

运行上面的代码,输出如下所示:

Found at index 1 - 4: ooo
Found at index 8 - 9: o

分组匹配

我们可以使用()元字符来分组匹配多个字符,并通过m.group(n)方法来获取每个分组的匹配结果。下面的示例中,我们匹配一个由数字和字母组成的字符串,并提取数字和字母部分:

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

public class RegexDemo {
    public static void main(String[] args) {
        String pattern = "(\\d+)([a-z]+)";
        String text = "123abc 456def";

        Pattern p = Pattern.compile(pattern);
        Matcher m = p.matcher(text);

        while (m.find()) {
            System.out.println("Found at index " + m.start() + " - " + m.end() + ": " + m.group());
            System.out.println("Number part: " + m.group(1));
            System.out.println("Letter part: " + m.group(2));
        }
    }
}

运行上面的代码,输出如下所示:

Found at index 0 - 6: 123abc
Number part: 123
Letter part: abc
Found at index 8 - 14: 456def
Number part: 456
Letter part: def

总结

本文介绍了Java中正则表达式的基本用法,包括如何创建正则表达式对象、匹配规则以及常见匹配操作。通过学习和掌握正则表达式的知识,我们可以更加灵活和高效地处理字符串操作。

本文链接:http://so.lmcjl.com/news/22236/

展开阅读全文
相关内容