• 正则表达式详解及应用


    正则表达式(Regular Expression),简称正则,是一种用于匹配字符串中字符组合的模式。它广泛应用于字符串查找、替换、数据验证等任务中。在Java中,正则表达式的支持由java.util.regex包提供。本文将详细介绍正则表达式的基础知识、用法和示例,帮助你全面理解和应用正则表达式。

    正则表达式简介

    正则表达式是一种字符序列,它定义了一个搜索模式。主要用于字符串模式匹配,如检索、替换、验证字符串。

    基本结构
    • 字面字符:直接匹配字符本身,如a1A
    • 元字符:具有特殊意义的字符,如.*+?[]()等。

    常见元字符
    • .:匹配任意单个字符(不包括换行符)。
    • *:匹配前面的子表达式零次或多次。
    • +:匹配前面的子表达式一次或多次。
    • ?:匹配前面的子表达式零次或一次。
    • []:匹配括号内的任意字符。
    • ():分组符,用于将多个字符作为一个单独的单元进行处理。
    • \:转义字符,用于转义元字符。

    正则表达式用法

    在Java中,正则表达式主要通过PatternMatcher类来使用。

    1. Pattern

    用于编译正则表达式。常用方法:

    • Pattern.compile(String regex): 编译给定的正则表达式。
    2. Matcher

    用于匹配正则表达式。常用方法:

    • Matcher.matches(): 尝试将整个输入序列与模式匹配。
    • Matcher.find(): 尝试在输入序列中查找与模式匹配的子序列。
    • Matcher.group(): 返回由以前匹配操作所匹配的输入子序列。

    示例代码

    以下是一些常见的正则表达式使用示例。

    示例1:基本匹配
    1. import java.util.regex.*;
    2. public class RegexExample {
    3. public static void main(String[] args) {
    4. String input = "hello123";
    5. //w+:匹配一个或多个单词字符(字母、数字或下划线)。
    6. //d+:匹配一个或多个数字。
    7. String pattern = "\\w+\\d+";
    8. Pattern compiledPattern = Pattern.compile(pattern);
    9. Matcher matcher = compiledPattern.matcher(input);
    10. if (matcher.matches()) {
    11. System.out.println("The input matches the pattern.");
    12. } else {
    13. System.out.println("The input does not match the pattern.");
    14. }
    15. }
    16. }
    17. /*
    18. 输出 The input matches the pattern.
    19. */
    示例2:分割字符串

    当调用str.split("\\s+")时,split方法会寻找一个或多个连续的空白字符,并以这些空白字符作为分隔符进行分割。

    1. public class SplitExample {
    2. public static void main(String[] args) {
    3. String str = "Java is fun";
    4. // 使用一个或多个空白字符作为分隔符
    5. // \\s:匹配任何空白字符,包括空格、制表符、换行符等。
    6. // +:匹配前面的子表达式一次或多次。
    7. String[] words = str.split("\\s+");
    8. // 打印分割后的字符串数组
    9. for (String word : words) {
    10. System.out.println(word);
    11. }
    12. }
    13. }
    14. /*
    15. Java
    16. is
    17. fun
    18. */

    常见正则表达式符号及其解释

    字符类
    • [abc]:匹配 abc 中的任意一个字符。
    • [^abc]:匹配除 abc 之外的任意字符。
    • [a-zA-Z]:匹配任意大小写字母。
    • [0-9]:匹配任意数字。
    • [a-z]:匹配任意小写字母。
    • [A-Z]:匹配任意大写字母。
    • [a-zA-Z0-9]:匹配任意字母和数字。
    • [!@#\$%\^&*()]:匹配任意一个特殊字符。
    预定义字符类
    • .:匹配任意字符(除换行符)。
    • \d:匹配任意数字,等价于[0-9]
    • \D:匹配任意非数字,等价于[^0-9]
    • \w:匹配任意单词字符(字母、数字、下划线),等价于[a-zA-Z0-9_]
    • \W:匹配任意非单词字符,等价于[^a-zA-Z0-9_]
    • \s:匹配任意空白字符(空格、制表符、换行符)。
    • \S:匹配任意非空白字符。
    数量词
    • *:匹配前面的子表达式零次或多次。
    • +:匹配前面的子表达式一次或多次。
    • ?:匹配前面的子表达式零次或一次。
    • {n}:匹配前面的子表达式恰好n次。
    • {n,}:匹配前面的子表达式至少n次。
    • {n,m}:匹配前面的子表达式至少n次,至多m次。
    示例3:验证电子邮件地址
    1. import java.util.regex.*;
    2. public class EmailValidation {
    3. public static void main(String[] args) {
    4. String email = "example@example.com";
    5. String pattern = "^[\\w-\\.]+@[\\w-\\.]+\\.[a-zA-Z]{2,}$";
    6. Pattern compiledPattern = Pattern.compile(pattern);
    7. Matcher matcher = compiledPattern.matcher(email);
    8. if (matcher.matches()) {
    9. System.out.println("Valid email address.");
    10. } else {
    11. System.out.println("Invalid email address.");
    12. }
    13. }
    14. }
    1. String pattern = "^[\\w-\\.]+@[\\w-\\.]+\\.[a-zA-Z]{2,}$";
    2. 正则表达式模式解释
    3. ^:表示字符串的开始。
    4. [\\w-\\.]+:匹配一个或多个单词字符(字母、数字、下划线)、连字符或点号。
    5. @:匹配字符 @。
    6. [\\w-\\.]+:匹配一个或多个单词字符(字母、数字、下划线)、连字符或点号。
    7. \\.:匹配字符 .,需要转义。
    8. [a-zA-Z]{2,}:匹配两个或更多的字母字符。
    9. $:表示字符串的结束。
    10. 综上,这个正则表达式匹配的模式是 用户名@域名.顶级域名,其中:
    11. 用户名可以包含字母、数字、下划线、连字符和点号。
    12. 域名可以包含字母、数字、下划线、连字符和点号。
    13. 顶级域名必须是两个或更多的字母。

     

    示例4:提取数字
    1. import java.util.regex.*;
    2. public class ExtractNumbers {
    3. public static void main(String[] args) {
    4. String input = "Order1234 shipped on 2023-01-01";
    5. String pattern = "\\d+";
    6. Pattern compiledPattern = Pattern.compile(pattern);
    7. Matcher matcher = compiledPattern.matcher(input);
    8. while (matcher.find()) {
    9. System.out.println("Found number: " + matcher.group());
    10. }
    11. }
    12. }
    13. /* 输出结果
    14. Found number: 1234
    15. Found number: 2023
    16. Found number: 01
    17. Found number: 01
    18. */

    总结

    正则表达式是一个强大且灵活的字符串处理工具,通过本文的介绍和示例,相信你已经掌握了正则表达式的基本知识和常见应用。在实际开发中,合理运用正则表达式,可以大大提高字符串处理的效率和代码的可读性。

    希望本文对你有所帮助。如果你有任何疑问或建议,欢迎在评论区留言讨论。Happy coding!

  • 相关阅读:
    判定二分图(染色法)
    galeracluster高可用集群安装(mysql)
    linux文件的隐藏属性、特殊属性和ACL权限
    Intel汇编-字符串的不等和相等比较
    L1-098 再进去几个人 - java
    C#操作modbus
    使用 Woodpecker 与 Gitea 搭建纯开源的 CI 流程|极限降本
    Grid布局
    全球C++软件开发顾问约翰·拉科斯(John Lakos)新书即将上架
    security 会话并发管理
  • 原文地址:https://blog.csdn.net/m0_59166601/article/details/140013406