一、正则表达式中的一些重点语法

  • 重复次数限定符

代码

说明

等价于

{n}

重复n次

{n,}

重复至少n次

{n,m}

重复n到m次

{1,}

重复至少一次

+

{0,}

重复任意次

*

{0,1}

重复零次或一次

?

  • 贪婪与懒惰
    1)贪婪匹配:当正则表达式中包含重复次数限定符时,通常的行为是(在使整个表达式能得到匹配的前提下)匹配尽可能多的字符。以这个表达式为例:a.*b,它将会匹配最长的以a开始,以b结束的字符串。如果用它来搜索aabab的话,它会匹配整个字符串aabab。这被称为贪婪匹配。
    2)懒惰匹配:在重复次数限定符后面加上号,如下表格

代码

说明

+?

重复至少一次,但尽可能少重复

*?

重复任意次,但尽可能少重复

??

重复零次或一次,但尽可能少重复

{n,m}?

重复n到m次,但尽可能少重复

{n,}?

重复n次以上,但尽可能少重复

  • 零宽断言

代码

说明

(?=exp)

匹配exp前面的位置

(?<=exp)

匹配exp后面的位置

(?!exp)

匹配后面跟的不是exp的位置

(?<!exp)

匹配前面不是exp的位置

二、Java中正则表达式的使用

主要运用java.util.regex包下的两个类:Pattern类Matcher类

(一)利用正则表达式匹配字符

主要分以下两步:

第一步:使用Pattern类构建正则表达式,并开启相应模式

第二步:通过匹配引擎Matcher类去查找

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

        String str = "abcdefghijk12345678abcd1234"; // 待匹配字符串

        Pattern p = Pattern.compile("\\d{4}"); // 第一步:构建正则表达式

        Matcher m = p.matcher(str); // 第二步:构建匹配引擎

        System.out.println(m.matches()); // matches()的作用是匹配整个字符串是否符合正则表达式,这里不符合,返回false

        System.out.println(m.find()); // find()的作用是查找子字符串是否符合正则表达式,这里符合,返回true

        while(m.find()){
            System.out.println(m.group());//打印5678和1234,因为上文已经调用了一次m.find(),匹配了1234,所以从后面继续往下匹配
        }

    }

}

(二)利用正则表达式替换匹配的字符

public class Test
{
    public static void main(String[] args)
    {
        String strBefore = "其他字符abcd123456待替换字符123456abcd其他字符"; // 待匹配字符串
        // 【1】构建正则表达式
        Pattern p = Pattern.compile("待替换字符");
        // 【2】构建匹配引擎
        Matcher m = p.matcher(strBefore);
        // 【3】替换字符
        String strAfter = m.replaceAll("替换之后的字符");

        System.out.println(strAfter);// 打印出“其他字符abcd123456替换之后的字符123456abcd其他字符”
    }

}