正则表达式

目录

1. 正则表达式简介

2. 正则表达式示例

2.1 验证

2.2 匹配

2.3 替换

2.4 全文查找

2.5 忽略大小写

2.6 元字符使用

2.7 字符集合的使用

2.8 常用正则表达式


1. 正则表达式简介

正则表达式(Regular Expression,简称Regex)是一种用于匹配字符串模式的强大工具。它通过定义特定的规则和模式,让我们能够简洁且高效地对文本进行搜索、验证、替换等操作。正则表达式广泛应用于文本处理、数据清理、网页抓取以及编程语言中的字符串操作。

正则表达式的基础在于定义一个模式,这个模式描述了我们希望在文本中找到的字符序列。通过这种方式,我们可以实现复杂的字符串操作,而无需编写大量的代码。

2. 正则表达式示例

2.1 验证

验证是正则表达式的常见用途之一。例如,我们可以使用正则表达式来判断一个字符串是否符合特定的格式,如电子邮件地址、电话号码或邮政编码等。

示例:验证电子邮件地址

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

public class RegexExample {
    public static void main(String[] args) {
        String email = "example@example.com";
        String pattern = "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$";

        if (email.matches(pattern)) {
            System.out.println("有效的电子邮件地址");
        } else {
            System.out.println("无效的电子邮件地址");
        }
    }
}

2.2 匹配

匹配是指从字符串中查找符合特定模式的子字符串。正则表达式提供了多种方法来查找匹配项。

示例:匹配电话号码

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

public class RegexExample {
    public static void main(String[] args) {
        String text = "我的电话号码是123-456-7890";
        String pattern = "\\d{3}-\\d{3}-\\d{4}";

        Pattern compiledPattern = Pattern.compile(pattern);
        Matcher matcher = compiledPattern.matcher(text);

        if (matcher.find()) {
            System.out.println("找到电话号码: " + matcher.group());
        } else {
            System.out.println("未找到电话号码");
        }
    }
}

2.3 替换

正则表达式还可以用于替换字符串中的某些部分。replaceAll()方法可以将匹配到的子字符串替换为指定的内容。

示例:替换文本中的数字

public class RegexExample {
    public static void main(String[] args) {
        String text = "今天是2024年6月18日";
        String pattern = "\\d+";
        String replacement = "#";

        String newText = text.replaceAll(pattern, replacement);
        System.out.println(newText);  // 输出: 今天是####年#月##日
    }
}

2.4 全文查找

有时我们需要查找所有符合模式的子字符串。findAll()方法可以返回所有匹配项的列表。

示例:查找所有数字

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

public class RegexExample {
    public static void main(String[] args) {
        String text = "我的号码是123,朋友的号码是456";
        String pattern = "\\d+";

        Pattern compiledPattern = Pattern.compile(pattern);
        Matcher matcher = compiledPattern.matcher(text);

        List<String> matches = new ArrayList<>();
        while (matcher.find()) {
            matches.add(matcher.group());
        }

        System.out.println(matches);  // 输出: [123, 456]
    }
}

2.5 忽略大小写

在匹配过程中,有时我们希望忽略大小写。这可以通过在正则表达式中使用Pattern.CASE_INSENSITIVE标志来实现。

示例:忽略大小写的匹配

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

public class RegexExample {
    public static void main(String[] args) {
        String text = "Hello World!";
        String pattern = "hello";

        Pattern compiledPattern = Pattern.compile(pattern, Pattern.CASE_INSENSITIVE);
        Matcher matcher = compiledPattern.matcher(text);

        if (matcher.find()) {
            System.out.println("找到匹配项: " + matcher.group());  // 输出: 找到匹配项: Hello
        } else {
            System.out.println("未找到匹配项");
        }
    }
}

2.6 元字符使用

元字符是正则表达式中的特殊字符,用于构建复杂的模式。常见的元字符包括.^$*+?{}[]|()等。

示例:使用元字符匹配

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

public class RegexExample {
    public static void main(String[] args) {
        String text = "cat, bat, mat";
        String pattern = "[cbm]at";

        Pattern compiledPattern = Pattern.compile(pattern);
        Matcher matcher = compiledPattern.matcher(text);

        while (matcher.find()) {
            System.out.println("找到匹配项: " + matcher.group());
        }
    }
}

2.7 字符集合的使用

字符集合是方括号[]中包含的一组字符,表示匹配其中任何一个字符。可以使用连字符-表示范围。

示例:使用字符集合

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

public class RegexExample {
    public static void main(String[] args) {
        String text = "a1b2c3";
        String pattern = "[a-c][1-3]";

        Pattern compiledPattern = Pattern.compile(pattern);
        Matcher matcher = compiledPattern.matcher(text);

        while (matcher.find()) {
            System.out.println("找到匹配项: " + matcher.group());
        }
    }
}

2.8 常用正则表达式

以下是一些常用的正则表达式及其用途:

  • 匹配电子邮件地址^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
  • 匹配电话号码(美国)^\d{3}-\d{3}-\d{4}$
  • 匹配邮政编码(中国)^[1-9]\d{5}(?!\d)$
  • 匹配IPv4地址^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$
  • 匹配日期(YYYY-MM-DD)^\d{4}-\d{2}-\d{2}$
  • 匹配URL^(https?|ftp)://[^\s/$.?#].[^\s]*$

这些正则表达式可以根据具体需求进行调整和优化,以适应不同的应用场景。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值