首页 > 编程语言 >Java中的正则表达式

Java中的正则表达式

时间:2024-10-01 13:22:00浏览次数:8  
标签:字符 domain 匹配 邮箱地址 正则表达式 zA user Java

目录

1. 普通字符

2. 特殊字符(元字符)

3. 字符类

4. 预定义字符类

5. 量词

6. 分组

7. 选择

8. 锚点

9. 转义

10. Unicode字符

案例:电子邮箱正则表达式详解

电子邮箱格式

常用的邮箱正则表达式

正则表达式解释

示例代码

输出

注意事项


1. 普通字符

普通字符就是字面上的意思,它们会匹配自身。例如:

  • a 匹配 "apple" 中的 "a"。
  • b 匹配 "banana" 中的 "b"。

2. 特殊字符(元字符)

特殊字符有特殊的含义,用于定义更复杂的模式。

  • .:匹配除换行符之外的任何单个字符。
  • *:表示前面的元素可以出现0次或多次。
  • +:表示前面的元素至少出现1次或多次。
  • ?:表示前面的元素可以出现0次或1次。
  • ^:匹配输入字符串的开始位置。
  • $:匹配输入字符串的结束位置。
  • ( ):分组,将多个元素视为一个单元。
  • [ ]:字符类,匹配方括号内的任意一个字符。
  • |:逻辑或,匹配两个或多个表达式中的一个。
  • \\:转义字符,用于匹配特殊字符本身。

3. 字符类

字符类用于匹配一个特定的字符集合。

  • [abc]:匹配 "a"、"b" 或 "c"。
  • [a-z]:匹配任意小写字母。
  • [A-Z]:匹配任意大写字母。
  • [0-9]:匹配任意数字。
  • [a-zA-Z]:匹配任意字母。
  • [^abc]:匹配除了 "a"、"b"、"c" 之外的任意字符。

4. 预定义字符类

预定义字符类是一些特殊的字符类,用于匹配常见的字符集合。

  • \d:匹配任意数字,等同于 [0-9]
  • \D:匹配非数字字符,等同于 [^0-9]
  • \w:匹配任意字母数字字符,包括下划线,等同于 [a-zA-Z0-9_]
  • \W:匹配非字母数字字符,等同于 [^a-zA-Z0-9_]
  • \s:匹配任意空白字符(空格、制表符、换行符等)。
  • \S:匹配非空白字符。

5. 量词

量词用于指定元素出现的次数。

  • *:0次或多次,如 a* 匹配 "cat" 中的 "c","caaaat" 中的 "caaat"。
  • +:1次或多次,如 a+ 匹配 "cat" 中的 "ca","caaaat" 中的 "caaaa"。
  • ?:0次或1次,如 a? 匹配 "cat" 中的 "c","caaaat" 中的 "c"。
  • {n}:恰好n次,如 a{3} 匹配 "a" 连续出现3次。
  • {n,}:至少n次,如 a{2,} 匹配 "aa" 或 "aaaaa"。
  • {n,m}:至少n次,最多m次,如 a{2,3} 匹配 "aa" 或 "aaa"。

6. 分组

分组用于将多个元素视为一个单元,并且可以应用量词。

  • (abc):将 "abc" 视为一个单元,可以应用量词,如 (abc)+ 匹配 "abcabc"。

7. 选择

选择用于匹配多个表达式中的一个。

  • a|b:匹配 "a" 或 "b"。

8. 锚点

锚点用于指定模式的位置。

  • ^:匹配输入字符串的开始位置,如 ^abc 匹配 "abc" 仅当它位于字符串的开始处。
  • $:匹配输入字符串的结束位置,如 abc$ 匹配 "abc" 仅当它位于字符串的结束处。

9. 转义

转义用于匹配特殊字符本身。

  • \.:匹配点字符。
  • \*:匹配星号字符。

10. Unicode字符

Unicode字符用于匹配特定的Unicode字符。

  • \u0041:匹配大写字母 "A"。

案例:电子邮箱正则表达式详解

电子邮箱格式
[email protected]

其中:

  • 用户名 (username) 由字母、数字、下划线、点、减号等组成,但不能以特殊符号开头或结尾,也不能有连续的点号。
  • 域名 (domain) 包含字母和数字,可能有多个子域名,用点分隔。
  • 顶级域名 (com) 由字母组成,通常为2到6个字符。
常用的邮箱正则表达式
String emailRegex = "^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+\\.[a-zA-Z]{2,6}$";
正则表达式解释
  • ^:匹配字符串的开始。
  • [a-zA-Z0-9_.-]+:匹配用户名部分,允许字母、数字、下划线 _、点 . 和减号 -,并且至少包含一个字符。
  • @:匹配邮箱中的 @ 符号。
  • [a-zA-Z0-9-]+:匹配域名部分,允许字母、数字和减号 -,并且至少包含一个字符。
  • \\.:匹配点 .,表示域名与顶级域名之间的分隔符。
  • [a-zA-Z]{2,6}:匹配顶级域名部分,要求为2到6个字母的组合(如 .com, .org, .net 等)。
  • $:匹配字符串的结束。
示例代码
import java.util.regex.*;

public class EmailValidation {
    public static void main(String[] args) {
        // 邮箱正则表达式
        String emailRegex = "^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+\\.[a-zA-Z]{2,6}$";
        String[] emails = {
            "[email protected]",     // 合法
            "[email protected]",  // 合法
            "[email protected]", // 合法
            "[email protected]",  // 合法
            "user@domain",          // 不合法,没有顶级域名
            "[email protected]",        // 不合法,顶级域名太短
            "@domain.com",          // 不合法,没有用户名
            "[email protected]",            // 不合法,域名不合法
        };

        Pattern pattern = Pattern.compile(emailRegex);

        // 验证每个邮箱
        for (String email : emails) {
            Matcher matcher = pattern.matcher(email);
            if (matcher.matches()) {
                System.out.println(email + " 是合法的邮箱地址。");
            } else {
                System.out.println(email + " 是不合法的邮箱地址。");
            }
        }
    }
}
输出
[email protected] 是合法的邮箱地址。
[email protected] 是合法的邮箱地址。
[email protected] 是合法的邮箱地址。
[email protected] 是合法的邮箱地址。
user@domain 是不合法的邮箱地址。
[email protected] 是不合法的邮箱地址。
@domain.com 是不合法的邮箱地址。
[email protected] 是不合法的邮箱地址。
注意事项

        虽然这个正则表达式能够匹配大多数有效的邮箱地址,但在实际开发中,完全验证邮箱地址的合法性可能涉及更多复杂的规则。例如,某些顶级域名可能会包含更多字符。实际应用中,建议除了正则表达式验证外,还结合发送验证邮件的方式来确保邮箱的有效性。

标签:字符,domain,匹配,邮箱地址,正则表达式,zA,user,Java
From: https://blog.csdn.net/Q_w7742/article/details/142650238

相关文章

  • 基于JAVA绘制验证码
    目录概要整体架构流程代码解释Java绘图注意事项:Swing演示效果概要        Java绘图通常指的是在Java应用程序中创建和显示图形、图像和其他视觉元素。        Swing是Java的一个图形用户界面工具包,它提供了一套丰富的组件来构建桌面应用程序,包括......
  • springboot基于java的智慧点餐系统(源码+文档+调试+vue+前后端分离)
    收藏关注不迷路!!......
  • 加解密demo(java、php)
    数据格式*@paramargs*撞库---入参加密字段signs加密前格式**{*"mobileMask":"134123412**",*"city":"武汉",*"system":"qxh"*}**撞库---返回加密字......
  • 《Java 基础篇》三:排序方式
    Author:ACatSmilingSince:2024-10-01在Java中经常会涉及到对象数组等的排序问题,那么就涉及到对象之间的比较问题。Java实现对象排序的方式有两种:自然排序:java.lang.Comparable。定制排序:java.util.Comparator。自然排序自然排序:java.lang.Comparable接口强行对实......
  • java计算机毕业设计本尚化妆品网站(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着电子商务的蓬勃发展和消费者对美妆产品需求的日益增长,化妆品电商网站逐渐成为人们购买化妆品的重要渠道。本尚化妆品网站作为一个新兴的化妆品电......
  • Java 死锁及避免讲解和案例示范
    在大型分布式系统中,死锁是一种常见但难以排查的并发问题。特别是在Java领域,死锁问题可能导致系统崩溃或卡顿。本文将以电商交易系统为例,详细讲解如何识别和避免Java程序中的死锁问题,确保系统高效运行。1.什么是死锁?死锁是指多个线程相互持有对方所需的资源,且都在等待......
  • 《Java 基础篇》一:入门
    Author:ACatSmilingSince:2024-09-30bit和byte计算机本质是一系列的电路开关。每个开关存在两种状态:开(on)和关(off)。如果电路是开的,它的值是1,如果电路是关的,它的值是0。一个0或者一个1存储为一个比特(bit),是计算机中最小的存储单位。计算机中最基本的存储单元是......
  • 《Java 基础篇》二:面向对象
    Author:ACatSmilingSince:2024-09-30概述面向过程(POP)与面向对象(OOP):二者都是一种思想,面向对象是相对于面向过程而言的。面向过程,强调的是功能行为,以函数为最小单位,考虑怎么做。面向对象,将功能封装进对象,强调具备了功能的对象,以类/对象为最小单位,考虑谁来做。面向对......
  • Java Stream介绍
    JavaStreamAPI是Java8引入的一项强大功能,旨在简化集合数据的处理。它允许开发者以更简洁和声明性的方式执行复杂的数据操作。以下是对JavaStreamAPI的详细介绍,包括其核心概念、常见操作、性能优化以及最佳实践。一核心概念1.1流(Stream):流是一种对数据序列的抽......
  • Java 中的 volatile和synchronized和 ReentrantLock区别讲解和案例示范
    在Java的并发编程中,volatile、synchronized和ReentrantLock是三种常用的同步机制。每种机制都有其独特的特性、优缺点和适用场景。理解它们之间的区别以及在何种情况下使用哪种机制,对提高程序的性能和可靠性至关重要。本文将详细探讨这三种机制的特性、使用场景及示例......