java正则表达式保姆级教程,从小白到高手

本文深入探讨了正则表达式的基本概念,包括限定符、字符匹配符、分组和特殊字符等,并结合Java中的Pattern和Matcher类介绍了正则表达式的应用。通过实例解析了如何在Java中使用正则表达式进行字符串匹配和提取,同时讨论了贪婪与非贪婪匹配的概念。文章强调了实践和理解正则表达式的重要性,鼓励读者多写多练,提升技术水平。
摘要由CSDN通过智能技术生成

目前所做的项目需要用到正则表达式,重新总结一下正则表达式。

正则表达式看似简单,实则门路颇多,究其原因也就是其太灵活了。完全掌握还是需要耗费一些功夫的。

一、正则表达式原字符

读者需对正则表达式元字符有一个初步的印象,实际应用时可以查阅文档。

正则表达式可以分为六类:限定符、选择匹配符、分组组合和反向引用符、字符匹配符、定位符、特殊字符

1、限定符转义符
字符描述
\转义字符
^匹配输入字符串的开始位置
$匹配输入字符串的结束位置
*匹配前面的子表达式零次或多次,等价于{0,}
+匹配前面的子表达式一次或多次,等价于{1,}
?匹配前面的子表达式零次或一次,等价于{0,1}
{n}匹配确定的n次
{n,}至少匹配n次
{n,m}最少匹配n次且最多匹配m次
{?}当该字符紧跟在任何一个其他限制符(*,+,?,{n},{n,},{n,m})后面时,匹配模式是非贪婪的
{n,}至少匹配n次
{\b}匹配一个单词边界
{\B}匹配非单词边界
2、字符匹配符
字符说明
[xyz]匹配所包含的任意一个字符
[^xyz]匹配未包含的任意字符
[a-z]匹配指定范围内的任意字符
[^a-z]匹配任何不在指定范围内的任意字符
3、捕获分组非捕获分组
字符描述
(pattern)匹配pattern并获取这一匹配
(?:pattern)匹配pattern但不获取匹配结果,也就是说这是一个非获取匹配
(?=pattern)在任何匹配pattern的字符串开始处匹配查找字符串
4、特殊字符
字符描述
.匹配任何单词字符,除\n以外,要匹配包括“\n”在内的任何字符,请使用像“(.
\d匹配一个数字字符。等价于[0-9]
\D匹配一个数字字符。等价于[0-9]
\r匹配一个换行
\s匹配任何空白字符
\S匹配任何非空白字符
\w匹配包括下划线的任何单词字符
\W匹配任何非单词字符
\t匹配一个制表符
\W匹配任何非单词字符
5、选择匹配符

x|y 匹配x或y

6、常用正则表达式
作用表达式
电子邮箱/^#?([a-f0-9]{6}
URL/^(https?😕/)?([\da-z.-]+).([a-z.]{2,6})([/\w .-])/?$/
中文([\u4e00-\u9fa5]+)
二、java中表达式的应用

java中对正则表达式的应用主要是两个类,下面是列出的一些常用方法,其中需要指明的是,这些都是静态方法。

1、Pattern类
compile(String regex) 将给定的正则表达式编译为Matcher。

matches(String regex, CharSequence input)直接匹配当前字符串
2、Matcher类
find(int start) 查找是否存在匹配

group(int group) 获取匹配分组

matches()  匹配当前字符串

start()  匹配开始位置

end(int group)  匹配结束位置

replaceAll(String replacement) 匹配替换
三、实例
1、使用java的正则表达式的一个简单应用
要求:提取出{abc}中的内容
 
 @Test
public void test11(){

   String str = "知情同意书签署日期 {zqdate}<yyyy/mm/dd>";
    String reg = "\\{+[a-z]?+\\}"; //  /<0=表0—入排标准>/--[0,2]
    //将规则封装成对象。
    Pattern p = Pattern.compile(reg);
    //让正则对象和要作用的字符串相关联。获取匹配器对象。
    Matcher m  = p.matcher(str);
    while(m.find())
    {
        System.out.println(m.group());
    }
}

结果
在这里插入图片描述

1、再整一个难活

有这样一串字符串在这里插入图片描述
仔细观察这段字符串是 a–a--a形式的 我要的是–部分,然后我这样写。
/<\d=(.|\n)*/<\d>/
发现提取出来只有一部分。
在这里插入图片描述

仔细分析后发现,java默认是采用的贪婪模式。而这段字符串是 a–a--a形式的,它把我第
一个a和最后一个a当做是匹配的一整个。

解决这个问题也很简单,只需要这样写
在这里插入图片描述
在限定符*后面加一个?标识这是一个非贪婪模式,结果正常了,作为两部分返回了。
在这里插入图片描述

四、总结

相信读者能把这两个例子看懂正则表达式也能有一个初步的掌握,而成为一个正则表达式高手就需要靠你了。

掌握正则表达式一定要多写,只有写的多了才可以熟记于心,不会的多查阅文档。

学知识要知其然,知其所以然。

过去出问题了只会在百度搜索,然后在结果中一个个的尝试。

现在有问题了,一步步debug源码寻找问题的根源。希望读者都能逐渐转变学习方式。

即使看不懂源码的每一步,也能对整个过程有一个初步的认识,对于以后学习源码有极大的帮助。

有问题小伙伴们评论区见喔。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值