当前位置: 首页 > news >正文

Java—— 正则表达式 方法及捕获分组

识别正则表达式的方法

方法名说明
public String[] matches(String regex)

判断字符串是否满足

正则表达式的规则

public string replaceAll(String regex,string newstr)

按照正则表达式的

规则进行替换

public string[] split(String regex)

按照正则表达式的

规则切割字符串

代码实现:

public class Test11 {public static void main(String[] args) {//第一个方法之前已经使用,主要演示后两个方法String str = "熊大mnduub熊二jnjdnjb光头强";String regex = "\\w+";String s = str.replaceAll(regex, "vs");System.out.println(s);//熊大vs熊二vs光头强String[] splitArr = str.split(regex);for (int i = 0; i < splitArr.length; i++) {System.out.println(splitArr[i]);}//熊大//熊二//光头强}
}

捕获分组:

一个括号代表一组,捕获分组就是把这一组的数据捕获出来,再用一次。
正则内部使用:\\组号
正则外部使用:$组号

组号定义规则:

从1开始,连续不间断

以左括号为基准,最左边的是第一组,其次为第二组,以此类推 

案例演示:

需求1:正则内部使用

判断一个字符串的开始字符和结束字符是否一致,只考虑一个字符
举例:a123a  b456b  17891  &abc&
判断一个字符串的开始部分和结束部分是否一致,可以有多个字符
举例:abc123abc  b456b  123789123  &!@abc&!@
需求3:判断一个字符串的开始部分和结束部分是否一致,开始部分每个字符也需要一致
举例:aaa123aaa  bbb456bbb  111789111  &&abc&& 

代码实现:

public class Test12 {public static void main(String[] args) {//判断一个字符串的开始字符和结束字符是否一致,只考虑一个字符//举例:a123a b456b 17891 &abc&//判断一个字符串的开始部分和结束部分是否一致,可以有多个字符//举例:abc123abc b456b 123789123 &!@abc&!@//需求3:判断一个字符串的开始部分和结束部分是否一致,开始部分每个字符也需要一致//举例:aaa123aaa bbb456bbb 111789111 &&abc&&//首字符任意,结束字符与首字符相同,首字符将捕获出来,再用一次//首字符:(.)//中间部分:.+//结束字符:\\1String regex1 = "(.).+\\1";System.out.println("a123a".matches(regex1));//trueSystem.out.println("b456b".matches(regex1));//trueSystem.out.println("17891".matches(regex1));//trueSystem.out.println("&abc&".matches(regex1));//trueSystem.out.println("&abcz".matches(regex1));//falseSystem.out.println("-------------------");//开始部分可以有多个字符,结束部分与其一致,将开始部分捕获出来,再用一次//开始部分:(.+)//中间部分:.+//结束部分:\\1String regex2 = "(.+).+\\1";System.out.println("abc123abc".matches(regex2));//trueSystem.out.println("b456b".matches(regex2));//trueSystem.out.println("123789123".matches(regex2));//trueSystem.out.println("&!@abc&!@".matches(regex2));//trueSystem.out.println("&!@abc&!x".matches(regex2));//falseSystem.out.println("-------------------");//开始部分可以有多个字符,每个字符也需要一致//结束部分与开始部分一致,将开始部分捕获出来,再用一次//开始部分:((.)\\2*))  (.)为第二组,需要重复,可以捕获出来用//中间部分:.+//结束部分:\\1String regex3 = "((.)\\2*).+\\1";System.out.println("aaa123aaa".matches(regex3));//trueSystem.out.println("bbb456bbb".matches(regex3));//trueSystem.out.println("111789111".matches(regex3));//trueSystem.out.println("&&abc&&".matches(regex3));//trueSystem.out.println("aaa123aaz".matches(regex3));//false}
}

需求2:正则外部使用

将字符串:我要学学编编编编程程程程程程
替换为:我要学编程

代码实现:

public class Test13 {public static void main(String[] args) {//将字符串:我要学学编编编编程程程程程程//替换为:我要学编程String str = "我要学学编编编编程程程程程程";//(.) 表示把重复内容的第一个字符看做一组//\\1 表示第一字符再次出现//+ 表示至少一次//$1 表示把正则表达式中第一组的内容,再拿出来用String s = str.replaceAll("(.)\\1+", "$1");System.out.println(s);//我要学编程}
}

非捕获分组:

分组之后不需要再用本组数据,仅仅是把数据括起来。

符号含义举例
(?:正则)获取所有Java(?:8|11|17)
(?=正则)获取前面部分Java(?=8|11|17)
(?!正则)获取不是指定内容的前面部分Java(?!8|11|17)

代码演示:

import java.util.regex.Matcher;
import java.util.regex.Pattern;public class Test9 {public static void main(String[] args) {String str = "Java自从95年问世以来,经历了很多版本,目前企业中用的最多的是Java8和Java11," +"因为这两个是长期支持版本,下一个长期支持版本是Java17,相信在未来不久Java17也会逐渐登上历史舞台";//需求1//其中 ?是占位符代表字符串Java,=表示字符串Java后面连接的部分//但是在获取的时候,只获取=前半部分String regex1 = "Java(?=8|11|17)";//调用方法进行爬虫show(regex1,str);//Java//Java//Java//Java//需求2//方式1:常规方式String regex2 = "Java(8|11|17)";show(regex2,str);//Java8//Java11//Java17//Java17//方式2:?是占位符代表字符串Java,:表示字符串Java后面连接的部分//在获取的时候,可以全部获取String reges3 = "Java(?:8|11|17)";show(reges3,str);//Java8//Java11//Java17//Java17//需求3//?是占位符代表字符串Java,!表示字符串Java后面连接的部分///在获取的时候,获取的是除了与!后面连接匹配的子串String regex4 = "Java(?!8|11|17)";show(regex4,str);//Java}//抽取一个方法进行爬虫public static void show(String regex,String str){Pattern p = Pattern.compile(regex);Matcher m = p.matcher(str);while(m.find()){String s = m.group();System.out.println(s);}}
}

相关文章:

  • Web常见攻击方式及防御措施
  • 怎么配置一个kubectl客户端访问多个k8s集群
  • 【数据可视化-26】基于人口统计与社会经济数据的多维度可视化分析
  • react-09React生命周期
  • wordpress学习笔记
  • AI与智能能源管理:如何通过AI优化能源分配和消耗?
  • Python----深度学习(基于深度学习Pytroch线性回归和曲线回归)
  • 【数据可视化-25】时尚零售销售数据集的机器学习可视化分析
  • vue3,element ui框架中为el-table表格实现自动滚动,并实现表头汇总数据
  • 从内核到应用层:深度剖析信号捕捉技术栈(含sigaction系统调用/SIGCHLD回收/volatile内存屏障)
  • ROS 快速入门教程03
  • 运维打铁:Centos 7使用yum安装 Redis 5
  • 【FAQ】PCoIP 会话后物理工作站本地显示器黑屏
  • centos挂载新的硬盘
  • Docker配置DNS方法详解及快速下载image方法
  • SpringBoot自定义拦截器以及多个拦截器执行顺序
  • 安卓adb shell串口基础指令
  • 【金仓数据库征文】加速数字化转型:金仓数据库在金融与能源领域强势崛起
  • 修改el-select背景颜色
  • 第9章 多模态大语言模型
  • 中信证券:“国家队”未曾减持ETF,应充分相信国家维稳决心
  • 青海西宁市公安局原党委委员、副局长王小华被“双开”
  • 商务部谈中欧汽车谈判进展
  • 神二十明日发射,长二F火箭推进剂加注工作已完成
  • 魔都眼·上海车展③ |被外籍展商围观的国产品牌
  • 世界读书日丨阅读与行走,都是理解世界的方式