常见正则表达式整理与Java使用正则表达式的例子

一、常见正则表达式整理

1. 基础验证类

  • 邮箱地址
    ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$
    (匹配如 user@example.com
  • 手机号
    ^1[3-9]\\\\d{9}$
    (匹配国内11位手机号,如 13812345678
  • 中文字符
    ^[\u4e00-\u9fa5]+$
    (匹配纯中文字符串,如 你好
  • 密码强度
    ^(?=.*[a-zA-Z])(?=.*\\d).{8,20}$
    (至少含字母和数字,长度8-20位)

2. 数据格式类

  • 日期(YYYY-MM-DD)
    ^\\d{4}-\\d{2}-\\d{2}$
  • 浮点数
    ^-?\\d+(\\.\\d+)?$
    (支持正负数及可选小数部分)
  • URL
    ^(https?:冒险一下)://(?:www\\.)?[-a-zA-Z0-9@:%._\\+~#?&//=]{2,256}\\. [a-z]{2,6}\\b(?:[-a-zA-Z0-9@:%._\\+~#?&//=]*)$
    (匹配带协议的完整URL)

3. 文件与路径类

  • 文件扩展名(如.jpg)
    \\\\.(jpg|png|gif)$
    (匹配以特定扩展名结尾的文件)

二、Java正则表达式使用示例

1. 邮箱匹配

import java.util.regex.*;
public class EmailExample {public static void main(String[] args) {String regex = "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\. [a-zA-Z]{2,}$";String input = "user.name+test@example.co.uk";Pattern pattern = Pattern.compile(regex);Matcher matcher = pattern.matcher(input);if (matcher.matches()) {System.out.println("邮箱有效");} else {System.out.println("邮箱无效");}}
}
  • 解释:^$ 确保全字符串匹配,\\. 转义点号,{2,} 匹配顶级域名长度。

2. 提取中文字符

public class ChineseExtract {public static void main(String[] args) {String input = "Hello 你好!欢迎使用正则表达式。";String regex = "[\\u4e00-\\u9fa5]+";Pattern pattern = Pattern.compile(regex);Matcher matcher = pattern.matcher(input);while (matcher.find()) {System.out.println("提取到中文:" + matcher.group());  // 输出 "你好" 和 "欢迎使用正则表达式"}}
}
  • 解释:\\u4e00-\\u9fa5 匹配Unicode范围内的中文字符。

3. 替换字符串中的空格

public class SpaceReplace {public static void main(String[] args) {String input = "   Java   正则表达式   示例   ";String regex = "\\s+";  // 匹配一个或多个空格String result = input.replaceAll(regex, " ").trim();System.out.println(result);  // 输出 "Java 正则表达式 示例"}
}
  • 解释:\\s+ 匹配连续空白字符,replaceAll 替换为单个空格。

4. 验证手机号

public class PhoneValidation {public static void main(String[] args) {String regex = "^1[3-9]\\\\d{9}$";String phone = "13812345678";boolean isValid = phone.matches(regex);System.out.println("手机号是否有效:" + isValid);  // 输出 true}
}
  • 解释:1 开头,第二位3-9,后接9位数字。

三、注意事项与优化建议

  1. 转义字符:Java中需双反斜杠(如 \\d 表示数字)。
  2. 预编译:高频使用的正则表达式应预编译为 Pattern 对象(如 Pattern.compile(regex))。
  3. 避免回溯:减少 .* 等贪婪匹配,优先用精确范围(如 \\d{4} 代替 .*)。
  4. 性能敏感场景:使用 Matcher.find() 代替 String.matches() 提升效率。

四、总结

Java正则表达式通过 java.util.regex 包实现,涵盖匹配、替换、验证等操作。合理使用分组、量词和边界符可增强表达式灵活性。实际开发中需结合具体需求选择模式,并注意性能优化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/78506.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue2 项目的 vscode 插件整理

Folder Selector 当项目文件很多时,查找一个文件,可能需要在资源管理器中不断的滚动再打开文件夹查找文件,很麻烦,这个可以增加一个面板通过右键文件夹选择 然后在面板中查看文件 Reveal Button 文件中跳转到另一个文件时&#…

使用 Node、Express 和 MongoDB 构建一个项目工程

本文将详细介绍如何使用 Node.js Express MongoDB 构建一个完整的 RESTful API 后端项目,涵盖: 项目初始化 Express 服务器搭建 MongoDB 数据库连接 REST API 设计(CRUD 操作) 错误处理与中间件 源码结构与完整代码 部署建…

如何实现Spring Boot应用程序的安全性:全面指南

在现代 Web 开发中,安全性是 Spring Boot 应用程序的核心需求,尤其是在微服务、云原生和公开 API 场景中。Spring Boot 结合 Spring Security 提供了一套强大的工具,用于保护应用程序免受常见威胁,如未经授权的访问、数据泄露、跨…

无人机避障——Mid360+Fast-lio感知建图+Ego-planner运动规划(胎教级教程)

电脑配置:Xavier-nx、ubuntu 18.04、ros melodic 激光雷达:Livox_Mid-360 结果展示:左边Mid360+Fast-lio感知建图,右边Ego-planner运动规划 1、读取雷达数据并显示 无人机避障——感知篇(采用Livox-Mid360激光雷达获取点云数据显示)-CSDN博客 看看雷达数据话题imu以及…

数据库证书可以选OCP认证吗?

直接回答:国内OCP认证持有者的年薪普遍在15万到40万元之间,具体收入与经验、地区和行业强相关。OCP认证能大幅提升求职竞争力,但薪资天花板仍由个人能力决定。 一、薪资范围和核心影响因素 OCP认证是Oracle数据库领域的中高级“技术通行证”…

MySQL 从入门到精通:第二篇 - 数据类型、约束与索引

1. MySQL数据类型详解 数值类型 整数类型 -- 常用整数类型及范围 CREATE TABLE integer_types (tiny_col TINYINT, -- 1字节,有符号(-128~127),无符号(0~255)small_col SMALLINT, -- 2字节,有符号(-32768~32767),无符号(0~65535)medium_col MEDIUMINT,

Arduino 入门学习笔记(二):开发环境搭建

Arduino 入门学习笔记(二):开发环境搭建 B站学习链接:link 1. Arduino IDE2软件介绍 Arduino IDE,Arduino Integrated Development Environment,即Arduino集成开发环境。 Arduino IDE具有程序编辑、调试…

ChatGPT、deepseek、豆包、Kimi、通义千问、腾讯元宝、文心一言、智谱清言代码能力对比

均使用测试时的最强模型 均是一次对话,对话内容一样 均开启深度思考 能联网的都联网了,但是作用不大,因为蓝桥杯刚考完,洛谷题目刚上传没多久 问题一测试了两遍 从问题三开始不再测试智谱清言(它思考时间太长了,前两个…

OCR之身份证识别

前言 OCR身份证识别是光学字符识别技术在身份证领域的应用。通过扫描或拍照获取身份证图像,利用图像处理、深度学习等技术,自动提取姓名、性别、民族、出生日期、地址、身份证号等信息,可大幅提升信息录入效率,广泛应用于政务、金…

线性代数—向量与矩阵的范数(Norm)

参考链接: 范数(Norm)——定义、原理、分类、作用与应用 - 知乎 带你秒懂向量与矩阵的范数(Norm)_矩阵norm-CSDN博客 什么是范数(norm)?以及L1,L2范数的简单介绍_l1 norm-CSDN博客 范数(Norm…

Java高频面试之并发编程-08

hello啊,各位观众姥爷们!!!本baby今天来报道了!哈哈哈哈哈嗝🐶 面试官:说说sleep和wait的区别? 1. 核心区别总结 特性sleep()wait()所属类Thread 类的静态方法Object 类的实例方法…

Spring-Ai-McpSever从外到内

MCP是什么 Model Context Protocol (MCP) 是一个开放协议,它使 LLM 应用与外部数据源和工具之间的无缝集成成为可能。无论你是构建 AI 驱动的 IDE、改善 chat 交互,还是构建自定义的 AI 工作流,MCP 提供了一种标准化的方式,将 LL…

ubuntu22.04 命令行修改静态ip

传统interfaces文件配置(适用于旧版)即便我们已经在桌面上配置了固定ip 这里也可以修改 ‌编辑配置文件‌ 修改/etc/network/interfaces(需安装net-tools): # interfaces(5) file used by ifup(8) and ifdown(8) # In…

计算机网络学习笔记 4-6章

第 4 章 网络层 【考纲内容】 (一)网络层的功能 异构网络互连;路由与转发;SDN 基本概念;拥塞控制 (二)路由算法 静态路由与动态路由;距离 - 向量路由算法&#xff1…

力扣hot100_子串_python版本

一、560. 和为 K 的子数组 思路:这就是一道典型的前缀和的题代码: class Solution:def subarraySum(self, nums: List[int], k: int) -> int:presum [0] * (len(nums) 1)for i, x in enumerate(nums):presum[i 1] presum[i] x # 前缀和序列需要n1个ans 0…

猿人学web端爬虫攻防大赛赛题第15题——备周则意怠-常见则不疑

解题步骤 1、观察抓的包 2、有个m参数,一看就是经过处理的,我们得知道m是如何组成的。看Initiator模块。 3、还是看request函数,往上一看就看到了m的赋值操作。 打断点,触发。 4、看下window.m()的定义 5、比较好理解的&#x…

rag增强检索-基于关键词检索的混合检索模式

1. 为什么在 RAG 里要用关键词检索? 向量检索(embedding-based retrieval)是找语义相近的内容,但有时候不够准确。比如用户问了具体人名、产品型号、年份,这类关键词强指向性的信息,用向量检索可能匹配不到最相关内容。**关键词检索(keyword-based retrieval)**可以直接…

纯真社区IP库离线版发布更新

纯真社区IP库离线版发布更新 发布者:技术分享 2005年,随着中国互联网的蓬勃发展,纯真IP库诞生了。作为全球网络空间地理测绘技术的领先者,纯真开源项目为中国互联网行业提供了高质量的网络空间IP库数据。纯真IP库目前已经覆盖超…

GitOps进化:深入探讨 Argo CD 及其对持续部署的影响

什么是 GitOps? 虽然软件开发生命周期的大部分已经实现自动化,但基础设施仍然在很大程度上依赖于人工,需要专业团队的参与。随着当今基础设施需求的不断增长,实施基础设施自动化变得越来越重要。现代基础设施需要具备弹性&#x…

通过示例学习:连续 XOR

通过示例学习:连续 XOR 如果我们想在 PyTorch 中构建神经网络,可以使用 (with) 指定所有参数(权重矩阵、偏差向量),让 PyTorch 计算梯度,然后调整参数。但是,如果我们有很…