Java中正则表达式的一些概念和用法

光猫桥接后网速不升反降?可能是你的路由器在“偷懒”! 本文详细分析了光猫桥接后网速不升反降的常见原因,包括路由器性能不足、MTU/MSS值设置错误等,并提供了四个关键排查步骤和路由器选购指南。通过优化PPPoE拨号设置和硬件配置,帮助用户解决网速下降问题,提升家庭网络性能。 阅读详情

ava中的正则表达式是用于匹配、搜索和操作文本的强大工具。它们广泛应用于数据验证、文本解析和替换等场景。Java提供了java.util.regex包,其中主要包含两个类:Pattern和Matcher,用于处理正则表达式。

下面将简单地讲解Java中的正则表达式,包括基础概念、语法、使用步骤和示例代码。

一. 什么是正则表达式

正则表达式(Regular Expression,简称regex)是一种用于匹配字符串模式的强大工具。

基础概念

  • Pattern(模式):表示已编译的正则表达式。它是不可变的,可用于创建多个Matcher实例。
  • Matcher(匹配器):用于执行匹配操作的引擎。它依赖于Pattern并应用到目标字符序列上。

它可以:

  • 查找文本
  • 替换文本
  • 验证格式
  • 提取字符串中的特定部分

二、正则表达式语法

1. 字符匹配

  • 普通字符:直接匹配自身,如a匹配字符'a'。
  • 元字符:具有特殊含义的字符,如.、*、+、?、^、$、[]、{}、()等。

2. 字符类

[abc]     // 匹配a、b或c中的任意一个字符
[^abc]    // 匹配除了a、b、c以外的任意字符
[a-z]     // 匹配所有小写字母
[A-Z]     // 匹配所有大写字母
[0-9]     // 匹配所有数字

3. 预定义字符类

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

4. 量词

*     // 匹配前面的表达式0次或多次
+     // 匹配前面的表达式1次或多次
?     // 匹配前面的表达式0次或1次
{n}   // 匹配前面的表达式恰好n次
{n,}  // 匹配前面的表达式至少n次
{n,m} // 匹配前面的表达式n到m次

三、基本使用步骤

1. 编译正则表达式

使用Pattern.compile()方法编译正则表达式:

Pattern pattern = Pattern.compile("正则表达式");

2. 创建匹配器

使用pattern.matcher()方法创建Matcher对象:

Matcher matcher = pattern.matcher("目标字符串");

3. 进行匹配

使用Matcher类的方法执行匹配操作:

  • matches():整个字符串是否匹配。
  • find():查找下一个匹配的子字符串。
  • group():获取当前匹配的子字符串。

 四、示例代码

下面通过一个示例演示如何在Java中使用正则表达式。

1.验证邮箱地址

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

public class EmailValidator {
    public static void main(String[] args) {
        String email = "user@example.com";
        String regex = "^[\\w.-]+@[\\w.-]+\\.\\w+$";

        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(email);

        if (matcher.matches()) {
            System.out.println("邮箱地址有效");
        } else {
            System.out.println("邮箱地址无效");
        }
    }
}

2.提取数字

public class NumberExtractor {
    public static void main(String[] args) {
        String text = "订单编号:12345,金额:¥678.90";
        String regex = "\\d+";

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

        while (matcher.find()) {
            System.out.println("找到的数字:" + matcher.group());
        }
    }
}

例题:根据给定菜单,输出菜单中价格数据,并计算出菜单中菜品的总价格 

public class Menu {
    public static void main(String[] args) {
        // 示例菜单字符串
        String menu = "红烧肉 28.8元\n" +
                     "清蒸鱼 38.5元\n" +
                     "炒青菜 12.5元\n" +
                     "蛋炒饭 16.0元\n" +
                     "番茄蛋汤 9.8元";
        processMenu(menu);
    }
    
    public static void processMenu(String menu) {
        String[] items = menu.split("\n");
        
        // 用于存储总价
        double totalPrice = 0.0;
        
        System.out.println("菜单中的价格数据:");
        
        for (String item : items) {
            String priceStr = item.replaceAll("[^0-9.]", "");
            
                // 将价格字符串转换为double类型
                double price = Double.parseDouble(priceStr);
                System.out.printf("%.2f\n", price);
                
                // 累加总价
                totalPrice += price; 
            
        }
        
        // 输出总价
        System.out.println("\n菜品总价格:" + String.format("%.2f", totalPrice) + "元");
    }
}

3. 分割字符串

public class StringSplitter {
    public static void main(String[] args) {
        String text = "苹果,香蕉;橙子|葡萄";
        String regex = "[,;|]";

        String[] fruits = text.split(regex);
        for (String fruit : fruits) {
            System.out.println(fruit);
        }
    }
}

4. 实用示例

public class RegexExamples {
    public static void main(String[] args) {
        // 提取价格的多种方法
        String price = "价格:¥99.99元";
        
        // 方法1:提取数字和小数点
        String price1 = price.replaceAll("[^0-9.]", "");
        System.out.println(price1); // "99.99"
        
        // 方法2:使用正则表达式捕获组
        String price2 = price.replaceAll(".*¥(\\d+\\.\\d+)元.*", "$1");
        System.out.println(price2); // "99.99"
        
        // 方法3:使用Pattern和Matcher类
        Pattern pattern = Pattern.compile("\\d+\\.\\d+");
        Matcher matcher = pattern.matcher(price);
        if (matcher.find()) {
            System.out.println(matcher.group()); // "99.99"
        }
    }
}
public class ReplaceAll {
    public static void main(String[] args) {
        System.out.println("""
                如果不需要正则表达式功能,优先使用replace,因为它会更高效。\s
                使用replaceAll时需要注意转义字符,因为正则表达式对某些字符(如.、*、?等)有特殊含义。
                如果不需要正则表达式功能,优先使用replace,因为它会更高效。\s
                使用replaceAll时需要注意转义字符,因为正则表达式对某些字符(如.、*、?等)有特殊含义。""");

//        String replace(CharSequence target, CharSequence replacement);
        String text1 = "hello world";
        String replacedText1 = text1.replace("o", "a"); // 替换所有的 "o" 为 "a"
        System.out.println(replacedText1); // 输出 "hella warld"


        //String replaceAll(String regex, String replacement);
        String text2 = "hello world";
        String replacedText2 = text2.replaceAll("o", "a"); // 替换所有的 "o" 为 "a"
        System.out.println(replacedText2); // 输出 "hella warld"

// 使用正则表达式替换所有的非字母字符
        String textWithSymbols = "hello123 world!";
        String replacedTextWithSymbols = textWithSymbols.replaceAll("[^a-zA-Z]", " ");
        System.out.println(replacedTextWithSymbols); // 输出 "hello   world "


    }
}

五、常用方法

Pattern类方法

  • compile(String regex):编译正则表达式。
  • compile(String regex, int flags):指定匹配标志编译正则表达式,如忽略大小写等。

Matcher类方法

  • matches():尝试将整个区域与模式匹配。
  • find():扫描输入序列以查找下一个匹配。
  • group():返回以前匹配操作的匹配结果。
  • start()和end():返回匹配的起始和结束索引。
  • replaceAll(String replacement):替换所有匹配的子字符串。

 六、注意事项与结论

  1. 转义字符:由于反斜杠在Java字符串中是转义字符,所以正则表达式中的反斜杠需要写成双反斜杠。例如,特殊字符(如 ., *, +, ?, |, (, ), [, ], {, }, ^, $)需要用 \ 转义, \d在Java中需要写成"\\d"。

  2. 性能优化:对于频繁使用的正则表达式,应该将其编译为Pattern对象并重复使用,而不是每次都编译,避免使用过于复杂的正则表达式,尽量使用具体的字符类而不是通配符。

  3. 输入验证:使用正则表达式进行输入验证时,要考虑全面,避免正则表达式过于宽松或严格。

掌握Java中的正则表达式可以大大提高字符串处理的效率和能力。通过Pattern和Matcher类,可以灵活地编译和应用正则表达式,实现复杂的文本匹配和操作。

数控系统(CNC)系列:Fanuc 31i-B_(16).CNC系统的网络连接与数据传输 硬件连接:包括网络接口的类型、连接方式等。网络协议:常用的网络协议包括Ethernet、Modbus TCP、Profinet等。网络配置:如何在CNC系统中配置网络参数,使其能够正确接入网络。在网络化的现代工业生产环境中,CNC系统的网络连接和数据传输能力变得越来越重要。通过以太网、Modbus TCP和Profinet等网络协议,可以实现CNC系统与上位机、其他CNC系统以及各种工业设备之间的高效通信。 阅读详情

相关推荐

LAP-D协议概述

Q.921协议由称为LAPD(链路访问协议-D通道),与HDLC的关系密切,它是在ISDN D通道上使用的数据链路协议。 注:http://www.freesoft.org/CIE/Topics/125.htm LAP-D的帧格式 标志、位填充技术和FCS校验计算与HDLC一致。 16位的地址包括C/R字段、SAPI(服务访问点标识)和TEI(端点标识)。TEI用于区分使用相同ISDN...

系统运维 1914

Java中的正则表达式 regex

常用类解析:正则表达式 regex前言一、正则表达式二、匹配规则 前言     正则表达式不仅仅是Java的技术,在任何一门编程语言中都会存在,是一种通用的IT技术,其理念和用法在任何编程语言中基本一致,除了有一些由于语言不同而导致的一些语法不同正则表达式,主要用于匹配(查找 替换 计数)字符串中的数据的,也叫做文本匹配技术。 一、正则表达式     经常会需要编写代码来验证用户输人,比如验证输人是否是一个数字,是否是一个全部小写的字符串,或者社会安全号。如何编写这种类型的代码呢?一个简单而有效的做法是使用

YING—country的博客 7122

嵌入式存储入门:Emmc控制器与设备工作原理全解析(附Synopsys/Arasan架构图)

本文深入解析了嵌入式系统中Emmc控制器与设备的工作原理,重点剖析了其作为CPU与存储设备桥梁的核心架构。通过对比Synopsys和Arasan两家主流IP厂商的控制器设计,详细阐述了DMA引擎与FIFO缓冲模块如何协同工作以提升数据传输效率,并提供了从硬件PCB布局到驱动调试的实战指南,帮助硬件工程师与开发者优化系统性能。

weixin_29248653的博客 146

Java 正则表达式 (regex)(基础知识)

匹配字符串 matches 方法 String.matches() 返回是否匹配指定的字符 如果是返回true 否则返回false 类似于 equals方法 例: "java".matches("java"); return true 当然 括号中是 正则表达式 matches 要做的是判断 当前字符串是否满足正则表达式 正则表达式的语法 更正 : 表格最后一个空删去最后一行 几个注意点 : 反斜杠是 特殊字符 要用 \\ 表示 括号要用 \\( 空白字符 即 ' ' '...

ypyyqqx的博客 5493

Tesseract in Java - Intellij IDEA对Tess4J的配置和使用

最近要弄OCR,搜到这个,官网全英文,很烦,看看有没有中文的博客介绍,擦,一个比一个奇葩,还是自己按照官方的来吧,外网慢的很,传到csdn给大家下载。中文训练库下载地址: http://download.youkuaiyun.com/detail/d_dmelon/9916532Tess4J3.4下载地址: http://download.youkuaiyun.com/detail/d_dmelon/9916519安装

Lewis的博客 1万+

Vite与Webpack路径配置大不同:从Vue2迁移到Vue3必须知道的public目录使用技巧

本文详细解析了Vite与Webpack在public目录路径配置上的核心差异,为Vue2迁移到Vue3的开发者提供实用指南。重点对比了两种构建工具的资源处理逻辑,给出典型编译警告的解决方案,并分享路径适配表与高级优化技巧,帮助开发者高效完成技术栈升级。

weixin_30836759的博客 485

java正则表达式

目录 一、概念 二、正则表达式语法 三、捕获组 四、Pattern类与Matcher类 1.matches( ) 2.split( ) 3.find( ) 4.group 5.start( )和end( ) 6.replace替换 7.reset( ) 8.代码演示 五、正则表达式在Java中的应用 1.判断功能 2.分割功能 3.替换功能 一、概念 正则表达式(regex)是一个字符串,由字面值字符和特殊符号组成,是用来描述匹配一个字符串集合的模式,可以用来匹配、.

m0_62618110的博客 6万+

ArcMap新手必看:5分钟搞定面要素的四至信息提取(附字段重命名技巧)

本文为ArcMap新手提供了快速提取面要素四至信息的详细教程,包括数据准备、坐标系选择、批量处理技巧及字段重命名优化方案。通过实战步骤和Python脚本示例,帮助用户高效完成GIS数据处理任务,特别适合行政区划数据分析和报告生成。

weixin_29266007的博客 384

常用正则表达式

目录 基本匹配 元字符 英文句号 字符集 否定字符集 重复 星号 加号 问号 花括号 字符组 分支结构 转义特殊字符 定位符 插入符号 美元符号 简写字符集 断言 正向先行断言 负向先行断言 正向后行断言 负向后行断言 标记 不区分大小写 全局搜索 多行匹配 常用正则表达式 1. 基本匹配 正则表达式只是我们用于在文本中检索字符串的模式。例如正则表达式 cat,表示:字母 c 后面跟着一个字母 a,再后面跟着一个字母 t。 "cat" => The cat sa

weixin_44730681的博客 3133

《QEMU/KVM源码分析与应用》读书笔记4 —— 第2章 QEMU基本组件(1)

《QEMU/KVM源码分析与应用》读书笔记4 —— 第2章 QEMU基本组件(1)

phmatthaus的专栏 1475

Python爬虫实战:爬取携程旅游平台数据,我拆解了动态反爬+Cookie续命(附完整可运行代码)

反爬类型表现形式应对思路sign参数返回403/空数据逆向JS还原加密逻辑Cookie时效登录后1小时Cookie失效定时刷新Cookie/保存登录态行为检测爬取过快触发验证码模拟真人延时/随机点击IP封禁单IP爬取超50条数据被封付费代理池/降低请求频率爬取携程旅游平台数据的核心,不是“简单的HTTP请求”,而是“理解平台的反爬逻辑并合规适配”——从sign参数破解到Cookie维护,再到行为模拟,每一步都是对HTTP协议、前端加密、用户行为的深度理解。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1713

Java 正则表达式(深度长文)

Java正则表达式(深度长文)

senxu_的博客 7万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Java 中正则表达式的详解

前言: Java提供正则表达式技术,专门用于处理文本问题。 简单的说:正则表达式(regular expression) 是对字符串执行模式匹配的技术。 一个正则表达式,就是用某种模式去匹配字符串的一个公式。 ......

路宇的博客 5387

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Java的正则表达式

任何字符\d 一个数字:[0-9]\D 非数字:[^O-9]\s 一个空白字符:[ \t\n\x0B\f\r]\S 非空白字符:[^\s]\w [a-zA-Z_0-9]英文、数字、下划线\W [^\w]一个非单词字符。

lghlhg的博客 524

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Java里面的正则表达式

正则表达式(Regular Expression,简称 regex 或 regexp)是一种用于描述、匹配和操作文本模式的强大工具。在 Java 中,包提供了对正则表达式的支持。

2301_82049845的博客 453

正则表达式(java)

除了上面提到的\d\D\s\S等预定义字符类外,Java还支持其他一些预定义字符类,如\w(匹配任何单词字符,等价于)和\W(匹配任何非单词字符,等价于。

ran_lian的博客 5859

JAVA深化篇_42—— 正则表达式

正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为 regex、regexp 或 RE),是计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。

guojiaqi_的博客 705

正则表达式和java注解学习小笔记

正则表达式和注解 正则表达式 ​ 正则表达式使用单个字符串来表述,匹配一系列符合某个句法规则的字符串。则表达式通常被用来检索,替换那些符合某个模式点的文本。 ​ java.util.regex包中提供以下两个类对正则表达式的支持: ​ Matcher类 ​ 通常解释Pattern对charactor sequence 执行匹配操作的引擎。 ​ Pattern类 ​ 正则表达式的编译表示形式。 ​ public final class Matcher extends Object implements Ma

weixin_55189860的博客 702

Java 正则表达式详解及实用案例

正则表达式(Regular Expression)是一种用来描述字符模式的规则。它可以用来验证字符串是否符合规则,或者从一段文本中提取特定的子字符串预定义字符类是字符类的简化写法,用来匹配常见的字符类型表达式描述匹配任意字符\d匹配数字,等价于[0-9]\D匹配非数字,等价于[^0-9]\s匹配空白字符\S匹配非空白字符\w匹配字母、数字、下划线,等价于\W匹配非字母、数字、下划线java复制代码System.out.println("123".matches("\\d+"));// true。

Gaomengsuanjia_的博客 1477

Java正则表达式

正则表达式定义了字符串的模式。 正则表达式可以用来搜索、编辑或处理文本。 正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。 正则表达式实例 一个字符串其实就是一个简单的正则表达式,例如Hello World正则表达式匹配 "Hello World" 字符串。 .(点号)也是一个正则表达式,它匹配任何一个字符如:"a" 或 "1"。 下表列出了一些正则表达式的实例及描述: 正则表达式 描述 this is text 匹配字符串 "this..

ChronZac的博客 191

简单认识正则表达式的概念

import java.util.regex.Matcher; import java.util.regex.Pattern; public class Test { public static void main(String[] args) { //简单认识正则表达式的概念 /* p("abc".matches("...")); p("a8729a".re

xzyxuanyuan的专栏 732

java 正则表达式 后缀_Java 测试正则表达式(二)量词和量词后缀

测试的结果作为注释放在测试方法的后面。package regularexpression;import java.util.regex.Matcher;import java.util.regex.Pattern;import org.junit.Test;/*** 测试量词和量词后缀;* X和Y是正则表达式* @author yuncong**/public class TestRegularE...

weixin_39982580的博客 220

正则表达式的思考

一个字符串其实就是一个简单的正则表达式,例如 Hello World 正则表达式匹配 “Hello World” 字符串。.(点号)也是一个正则表达式,它匹配任何一个字符如:“a” 或 “1”。

zhou_145的博客 107

【JAVA】正则表达式及其相关的方法和对象

很久之前,正则表达式就已经整合到标准Unix工具集之中,例如sed和awk,以及程序设计语言之中了,例如Python和Perl(有些人认为正是正则表达促成了Perl的成功)。而在Java中,字符串操作还主要集中于String、StringBuffer和StringTokenizer类。与正则表达式相比较,它们只能提供相当简单的功能。 正则表达式是一种强大而灵活的文本处理工具。使用正则表达式,我们能...

LED_of_Java的博客 339

java 正则表达式 —— 1.基础语法

java 正则表达式 —— 1.基础语法

u014212540的博客 467
上一篇: C++中的字符和字符串
py_cpp_java_c
博客等级 码龄3年 125粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值