前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java正则表达式保姆级教程,从小白到高手

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

原创
作者头像
程序员田同学
发布2021-12-31 14:56:14
3270
发布2021-12-31 14:56:14
举报
文章被收录于专栏:java-springjava-spring

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

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

一、正则表达式原字符

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

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

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”在内的任何字符,请使用像“(.

\n)”的模式

\d

匹配一个数字字符。等价于0-9

\D

匹配一个数字字符。等价于0-9

\r

匹配一个换行

\s

匹配任何空白字符

\S

匹配任何非空白字符

\w

匹配包括下划线的任何单词字符

\W

匹配任何非单词字符

\t

匹配一个制表符

\W

匹配任何非单词字符

5、选择匹配符

x|y 匹配x或y

6、常用正则表达式

作用

表达式

电子邮箱

/^#?(a-f0-9{6}

a-f0-9{3})$/

URL

/^(https?:\/\/)?(\da-z.-+).(a-z.{2,6})(\/\w .-)\/?$/

二、java中表达式的应用

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

1、Pattern类

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

matches(String regex, CharSequence input)直接匹配当前字符串

2、Matcher类
代码语言:txt
复制
find(int start) 查找是否存在匹配
代码语言:txt
复制
group(int group) 获取匹配分组
代码语言:txt
复制
matches()  匹配当前字符串
代码语言:txt
复制
start()  匹配开始位置
代码语言:txt
复制
end(int group)  匹配结束位置
代码语言:txt
复制
replaceAll(String replacement) 匹配替换
三、实例
1、使用java的正则表达式的一个简单应用
代码语言:txt
复制
要求:提取出{abc}中的内容
代码语言:txt
复制
 @Test
代码语言:txt
复制
public void test11(){
代码语言:txt
复制
   String str = "知情同意书签署日期 {zqdate}<yyyy/mm/dd>";
代码语言:txt
复制
    String reg = "\\{+[a-z]?+\\}"; //  /<0=表0—入排标准>/--[0,2]
代码语言:txt
复制
    //将规则封装成对象。
代码语言:txt
复制
    Pattern p = Pattern.compile(reg);
代码语言:txt
复制
    //让正则对象和要作用的字符串相关联。获取匹配器对象。
代码语言:txt
复制
    Matcher m  = p.matcher(str);
代码语言:txt
复制
    while(m.find())
代码语言:txt
复制
    {
代码语言:txt
复制
        System.out.println(m.group());
代码语言:txt
复制
    }
代码语言:txt
复制
}

结果

在这里插入图片描述
在这里插入图片描述
1、再整一个难活

有这样一串字符串

image.png
image.png

仔细观察这段字符串是 a--a--a形式的 我要的是--部分,然后我这样写。

image.png
image.png

发现提取出来只有一部分。

image.png
image.png

仔细分析后发现,java默认是采用的贪婪模式。而这段字符串是 a--a--a形式的,它把我第

一个a和最后一个a当做是匹配的一整个。

解决这个问题也很简单,只需要这样写

在这里插入图片描述
在这里插入图片描述

在限定符*后面加一个?标识这是一个非贪婪模式,结果正常了,作为两部分返回了。

image.png
image.png
四、总结

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

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

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

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

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

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

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、正则表达式原字符
    • 1、限定符、转义符
      • 2、字符匹配符
        • 3、捕获分组、非捕获分组
          • 4、特殊字符
            • 5、选择匹配符
              • 6、常用正则表达式
              • 二、java中表达式的应用
                • 1、Pattern类
                  • 2、Matcher类
                  • 三、实例
                    • 1、使用java的正则表达式的一个简单应用
                      • 1、再整一个难活
                      • 四、总结
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档