跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

Java正则表达式超详细讲解(简单易懂版)

目录前言

一、基础概念

1. 什么是正则表达式?

2. Java中正则表达式的两个核心类:

二、基本语法

1. 普通字符

2. 特殊字符(元字符)

3. 常用元字符

4. 量词

三、Java中使用正则表达式

1. 简单匹配示例

2. 完整使用步骤

3. 常用方法

四、实际应用示例

1. 验证邮箱格式

2. 提取所有数字

3. 替换字符串

五、分组和捕获

六、常见问题

总结前言正则表达式是用来匹配和处理文本的强大工具。在Java中,主要通过java.util.regex包中的Pattern和Matcher类来实现。

一、基础概念

1. 什么是正则表达式?

正则表达式(Regular Expression)是一种用来描述字符串模式的特殊语法,可以用来:检查字符串是否符合某种格式从字符串中提取特定部分替换字符串中的内容

2. Java中正则表达式的两个核心类:

Pattern:编译后的正则表达式模式Matcher:用模式匹配字符串的引擎

二、基本语法

1. 普通字符

普通字符(字母、数字)直接匹配自身:a匹配字母"a"5匹配数字"5"

2. 特殊字符(元字符)

这些字符有特殊含义,需要用\

转义:

. ^ $ * + ? { } [ ] \ | ( )

3. 常用元字符

字符说明示例.匹配任意单个字符a.c匹配 "abc"、"a1c"\d数字 [0-9]\d\d匹配 "12"、"34"\D非数字 [^0-9]\D\D匹配 "ab"、"##"\w单词字符 [a-zA-Z0-9_]\w\w匹配 "a1"、"B_"\W非单词字符\W\W匹配 "@#"、"! "\s空白字符 [ \t\n\x0B\f\r]a\sb匹配 "a b"\S非空白字符a\Sb匹配 "a1b"

4. 量词

量词说明示例*0次或多次a*匹配 ""、"a"、"aa"+1次或多次a+匹配 "a"、"aa"?0次或1次a?匹配 ""、"a"{n}恰好n次a{2}匹配 "aa"{n,}至少n次a{2,}匹配 "aa"、"aaa"{n,m}n到m次a{2,4}匹配 "aa"、"aaa"、"aaaa"正则表达式描述this is text匹配字符串 "this is text"this\s+is\s+text注意字符串中的\s+。

匹配单词 "this" 后面的\s+可以匹配多个空格,之后匹配 is 字符串,再之后\s+匹配多个空格然后再跟上 text 字符串。

可以匹配这个实例:this is text^\d+(\.\d+)?^ 定义了以什么开始\d+ 匹配一个或多个数字? 设置括号内的选项是可选的\. 匹配 "."可以匹配的实例:"5", "1.5" 和 "2.21"。

三、Java中使用正则表达式

1. 简单匹配示例

String text = "Hello, my phone number is 123-456-7890";String pattern = "\\d{3}-\\d{3}-\\d{4}"; // 匹配电话号码格式

boolean isMatch = text.matches(pattern); // false,因为matches要求整个字符串匹配boolean contains = Pattern.compile(pattern).matcher(text).find(); // true

2. 完整使用步骤

// 1. 编译正则表达式Pattern p = Pattern.compile("a*b");

// 2. 创建匹配器Matcher m = p.matcher("aaaaab");

// 3. 进行匹配boolean b = m.matches(); // true

3. 常用方法

方法说明matches()整个字符串是否匹配find()查找下一个匹配项group()返回匹配的字符串start()/end()匹配的起始/结束位置replaceAll()替换所有匹配项

四、实际应用示例

1. 验证邮箱格式

String email = "test@example.com";String regex = "^[\\w-]+(\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$";

boolean isValid = email.matches(regex); // true

2. 提取所有数字

String text = "订单123,金额456.78元";Pattern p = Pattern.compile("\\d+\\.?\\d*");Matcher m = p.matcher(text);

while(m.find()) {System.out.println("找到数字: " + m.group());}// 输出:// 找到数字: 123// 找到数字: 456.78

3. 替换字符串

String text = "2023-05-15";String newText = text.replaceAll("(\\d{4})-(\\d{2})-(\\d{2})", "$2/$3/$1");// 结果: "05/15/2023"

五、分组和捕获

用()

创建分组:

String text = "John Doe, age 30";Pattern p = Pattern.compile("(\\w+) (\\w+), age (\\d+)");Matcher m = p.matcher(text);

if(m.find()) {System.out.println("姓名: " + m.group(1) + " " + m.group(2));System.out.println("年龄: " + m.group(3));}// 输出:// 姓名: John Doe// 年龄: 30

六、常见问题

转义问题:Java字符串中\需要写成\\正则中的\d→ Java字符串中写成"\\d"贪婪匹配:默认是贪婪匹配(匹配尽可能多的字符)

在量词后加?

改为非贪婪匹配:

.*?性能优化:重用Pattern对象(编译正则表达式比较耗时)

避免过度复杂的正则表达式总结到此这篇关于Java正则表达式的文章就介绍到这了,更多相关Java正则表达式详解内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:Java 正则表达式详解JAVA正则表达式 Pattern和Matcher java中 利用正则表达式提取( )内内容Java 正则表达式学习总结和一些小例子java正则表达式验证邮箱、电话号码示例Java正则表达式入门基础篇(新手必看)收集的一些常用java正则表达式Java正则表达式的基本用法和实例大全详解Java正则表达式语法

相关文章