前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >编程笔记_JAVA_正则表达式工具

编程笔记_JAVA_正则表达式工具

作者头像
陈黎栋
发布于 2020-02-17 15:31:50
发布于 2020-02-17 15:31:50
9200
举报

导入类

java.util.regex.Pattern; //模式类:字符串要被匹配的模式

java.util.regex.Matcher;//匹配类:匹配某个字符串所产生的结果,一个字符串中可能有多处匹配

一、捕获组的概念【还不懂】

((A)(B(C)))

1 ((A)(B(C)))

2 (A)

3 (B(C))

4 (C)

二、关键函数

1、matches()和find()的区别

(1)匹配方式不一样

matches() 是拿整个输入的字符串和定义的正则模式匹配;

find() 是包含匹配, 整个输入的字符串包含定义的正则模式.

(2)调用顺序不一致, 结果也会不一致

(3) find()使用后,值会变化

二、示例程序

1、Pattern.compile("[0-9]+").matcher("1234567890").matches()

if(Pattern.compile("[0-9]+").matcher("1234567890").matches()){ // 使用正则

System.out.println("是由数字组成!") ;

}else{

System.out.println("不是由数字组成!") ;

}

2、

Pattern p = Pattern.compile(pat) ; // 实例化Pattern类

Matcher m = p.matcher(str) ; // 实例化Matcher类

if(m.matches()){ // 进行验证的匹配,使用正则

System.out.println("日期格式合法!") ;

}else{

System.out.println("日期格式不合法!") ;

}

3、带有find()和group()的用法

public String getUserid(String iniWeibo) {

String userid = null;

Pattern puserid = Pattern.compile("href=\\\\\"http:\\\\/\\\\/weibo.com\\\\/u\\\\/[0-9]{10}");

Matcher muserid = puserid.matcher(iniWeibo);

if(muserid.find()){

userid = muserid.group();

userid = userid.substring(userid.indexOf("u")+3, userid.indexOf("u")+13);

}

return userid;

}

三、String类自带的正则表达式操作

1、str.replaceAll(pat)

String str1 = "A1B22C333D4444E55555F".replaceAll("\\d+","_") ;

2、str.matches(pat)

boolean temp = "1983-07-27".matches("\\d{4}-\\d{2}-\\d{2}") ;

3、str.split(pat)

String s[] = "A1B22C333D4444E55555F".split("\\d+") ;

四、常用函数

1、p.split(str)

String str = "A1B22C333D4444E55555F" ; // 指定好一个字符串

String pat = "\\d+" ; // 指定好正则表达式

Pattern p = Pattern.compile(pat) ; // 实例化Pattern类

String s[] = p.split(str) ; // 执行拆分操作

2、m.replaceAll(str)

String str = "A1B22C333D4444E55555F" ; // 指定好一个字符串

String pat = "\\d+" ; // 指定好正则表达式

Pattern p = Pattern.compile(pat) ; // 实例化Pattern类

Matcher m = p.matcher(str) ; // 实例化Matcher类的对象

String newString = m.replaceAll("_") ;//执行替换操作

五、需要注意的字符

\\\\\" ————————\" ———————— "

.+? -----------任意字符

\\d------------任意数字

\\|------------ |

六、重要匹配

\w 包括大小写字母和数字 \W

\s \S

\d 数字 \D 非数字

http://www.nowamagic.net/librarys/veda/detail/1038

贪婪匹配

它会匹配尽可能多的字符。它首先看整个字符串,如果不匹配,对字符串进行收缩;遇到可能匹配的文本,停止收缩,对文本进行扩展,当发现匹配的文本时,它不着急将该匹配保存到匹配集合中,而是对文本继续扩展,直到无法继续匹配 或者 扩展完整个字符串,然后将前面最后一个符合匹配的文本(也是最长的)保存起来到匹配集合中。所以说它是贪婪的

惰性匹配

它会匹配尽可能少的字符,它从第一个字符开始找起,一旦符合条件,立刻保存到匹配集合中,然后继续进行查找。所以说它是懒惰的。

贪婪匹配

惰性匹配

匹配描述

?

??

匹配 0 个或 1 个

+

+?

匹配 1 个或多个

*

*?

匹配 0 个或多个

{n}

{n}?

匹配 n 个

{n,m}

{n,m}?

匹配 n 个或 m 个

{n,}

{n,}?

匹配 n 个或多个

单词边界匹配

\bmagic\b,这个正则匹配,必须以m开头,以c为结尾的字符串。

\b是正则表达式规定的一个特殊代码(好吧,某些人叫它元字符,metacharacter),代表着单词的开头或结尾,也就是单词的分界处。虽然通常英文的单词是由空格,标点符号或者换行来分隔的,但是\b并不匹配这些单词分隔字符中的任何一个,它只匹配一个位置。

边界的定义

通常情况下,以 空格、段落首行、段落末尾、逗号、句号 等符号作为边界,值得注意的是,分隔符"-"也可以作为边界。

边界的相对性:

当你对一个普通字符,比如"s",设定边界的时候,它的边界是诸如空格、分隔符、逗号、句号等。

当你对一个边界,比如分隔符"-"或者","等,设定边界的时候,它的边界是普通字符。

1

\b(,)\b

效果演示

welcome to nowamagic,this magic place!

匹配非单词边界——\B

匹配文本首 ^

匹配文本末 $

后向文本引用变换

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
​idea如何新建一个多模块的springCloud项目
javaNice
2023/11/22
5891
SpringBoot2.5.1整合thymeleaf以及springsecurity后sec:authorize无效的问题
我发现换成springsecurity5之后,模板引擎的sec:authorize相关的所有标签没有补全提示了,但还能用,影响不大
别团等shy哥发育
2023/02/25
2510
聚合工程整合 SpringBoot(七)
该篇文章项目地址https://gitee.com/gtfgtf/ttchrcgx.git day02分支 在顶级项目中的 pom.xml 中配置如下类容
高大北
2022/06/14
1770
SpringBoot+虚拟线程,接口吞吐量成倍增加,太爽了!
在这篇文章中,我们将看到如何在spring-boot中利用loom虚拟线程。我们还将在JMeter的帮助下做一些负载测试,看看虚拟线程和普通线程的响应时间如何。
码猿技术专栏
2023/11/20
5751
SpringBoot+虚拟线程,接口吞吐量成倍增加,太爽了!
springboot第4集:springboot模块化开发与项目搭建流程
Spring Boot 是一个基于 Spring 框架的快速开发框架,可以用于构建独立的、生产级别的应用程序。在进行模块化开发时,将应用程序拆分为多个小的、可重用的模块,每个模块负责实现自己的功能。下面是 Spring Boot 模块化开发与项目搭建的流程:
达达前端
2023/10/08
9150
自定义springboot starter-有demo-可伸手
git仓库: https://gitee.com/suveng/util-all/tree/b28fedd33e4c8cdf175a1c14e275c70293e1d3b1/alarm-spring-boot-starter
suveng
2020/11/12
5830
【极数系列】Flink搭建入门项目Demo & 秒懂Flink开发运行原理(05)
gitee地址:https://gitee.com/shawsongyue/aurora.git 源码直接下载可运行,模块:aurora_flink Flink 版本:1.18.0 Jdk 版本:11
夏之以寒
2024/03/04
6480
【极数系列】Flink搭建入门项目Demo & 秒懂Flink开发运行原理(05)
SpringBoot 实现Session共享
HttpSession,是通过Servlet容器创建并进行管理的,创建成功以后将会保存在内存中,这里将会使用Redis解决session共享的问题。
mySoul
2020/06/24
6230
Springboot热部署,使用spring-boot-devtools、springloaded两种方式进行热部署
1、在项目的开发阶段,经常需要对代码进行反复修改,这样就会导致SpringBoot运行容器反复启动。为了解决这种频繁重启问题,SpringBoot提供了自动加载配置的依赖库,以实现代码的动态加载。
别先生
2020/10/10
1.2K0
Springboot热部署,使用spring-boot-devtools、springloaded两种方式进行热部署
01_分布式电商系统搭建dubbo+zk+SpringBoot
编写接口和存放相关的bean。也可以把bean放到common-util 这个要看个人怎么搭建项目架构.user-web。依赖api接口,不就把bean一起了。
全栈程序员站长
2022/06/30
3250
【极光系列】springboot集成redis
配置路径在解压目录下:E:\redis\redis.windows.conf,在配置文件中找到 # requirepass foobared,然后在下面增加一行requirepass 后面即是你需要定义的密码,我定义的是aurora:requirepass aurora
夏之以寒
2024/03/04
1080
【极光系列】springboot集成redis
打包SpringBoot工程并部署
   在Goals中输入:org.apache.maven.plugins:maven-jar-plugin:2.4:jar org.springframework.boot:spring-boot-maven-plugin:1.0.1.RELEASE:repackage
JQ实验室
2022/02/09
5040
打包SpringBoot工程并部署
springboot+eureka集群搭建
eureka集群搭建 此集群共有三个eureka台组成 eureka集群的核心思想就是互相注册,相互守望,你中有我,我中有你(个人理解) 意思就是第一台机器01注册地址defaultZone中的地址是02,03的,02的注册地址是01,03的。03的注册地址是01,02的 首先新建三个项目来代表eureka的三台机器 父类的pom文件大家可以一起用
全栈程序员站长
2022/08/31
3160
springboot+eureka集群搭建
GraphQL实践2——Spring-GraphQL集成JPA与MySQL
上一篇介绍到用第三方库集成GraphQL,目前spring-graphql项目已经出到1.0.0-M3版本,属于内部预览版,此处尝鲜验证
F嘉阳
2022/10/28
1.4K0
WebService: SpringBoot集成WebService实践二
该篇为上一篇的延伸,上一篇知识简单介绍了WebService 的使用,该篇会对代码中模块及功能进行详细介绍,以作对WebService 进一步的理解。
Freedom123
2024/03/29
5970
WebService: SpringBoot集成WebService实践二
【极数系列】Flink集成DataSource读取Socket请求数据(09)
夏之以寒
2024/03/04
2660
【极数系列】Flink集成DataSource读取Socket请求数据(09)
Spring Boot + WebMagic 实现网页爬虫,写得太好了!
WebMagic框架的使用并不是本文的重点,具体如何使用请参考官方文档:http://webmagic.io/docs/。
芋道源码
2021/10/14
5.5K0
【微服务】Nacos实现服务间的调用 后端程序猿必经之路
之前的文章讲诉了Nacos的具体功能,那么有了理论肯定是不够的,这一次我们来利用Nacos实现简单的服务之间简单的调用,对于Nacos不是很了解可以先去看看 【微服务】 Nacos的入门级使用 后端程序猿必经之路。 话不多说,开整开整
小王不头秃
2024/06/19
1.5K0
【微服务】Nacos实现服务间的调用 后端程序猿必经之路
Springboot用idea写查询数据库程序(详细讲解)
先把代码给大家详细贴以下 首先是连接数据库的application.properties
默 语
2024/11/20
1320
Springboot用idea写查询数据库程序(详细讲解)
SpringCloud2.0入门4-springboot-admin监控
上一节为springboot项目添加springboot-admin监控 学习了基于springboot1.5自己注册到admin的方法。接下来学习结合Eureka使用以及2.0的改变。
Ryan-Miao
2018/07/27
1.3K0
SpringCloud2.0入门4-springboot-admin监控
推荐阅读
相关推荐
​idea如何新建一个多模块的springCloud项目
更多 >
LV.1
这个人很懒,什么都没有留下~
作者相关精选
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档