首页 > 编程语言 >正则表达式在Java中的使用

正则表达式在Java中的使用

时间:2022-09-01 20:22:06浏览次数:59  
标签:Java String 正则表达式 System regular 使用 println example out

正则表达式在Java中的使用不仅限于String类中的match()方法!!!

正则中的^与$

首先我们来了解这两个符号在正则表达式中的作用:

^ 符号放在表达式头部表示开始匹配
$符号放在尾部表示结束匹配
如果同时携带^与$符,表示整体匹配,$后面如果再携带其他东西,是会匹配失败的

整体匹配

整体匹配失败

整体匹配失败

如果不携带$则表示部分部分匹配,如图:

结论:以$结尾的正则只能匹配一个字符串,反之可以匹配多个字符串。

String的matches方法与上文的异同

来看这几组匹配结果:

String regular = "^/(?<org>[^/]+)/(?<app>[^/]+)/pattern$";
String example = "/org/app/pattern";
System.out.println(example.matches(regular));//true
String regular = "^/(?<org>[^/]+)/(?<app>[^/]+)/pattern$";
String example = "/org/app/pattern123";
System.out.println(example.matches(regular));//false
String regular = "^/(?<org>[^/]+)/(?<app>[^/]+)/pattern";
String example = "/org/app/pattern123";
System.out.println(example.matches(regular));//false

与上文中正则匹配的异同就在于,当没有$结尾的时候,正常的正则匹配显示的是部分匹配。而Spring中的match方法给出的匹配结果是false。所以如果遇到这种场景,使用String的match方法很有可能出问题

Java中的Pattern

使用Pattern编译正则表达式之后再进行match就可以规避String中match方法出现的问题,直接看代码

String regular = "^/(?<org>[^/]+)/(?<app>[^/]+)/pattern";
String example = "/org/app/pattern123";
System.out.println(example.matches(regular));//false

Pattern compile = Pattern.compile(regular);
Matcher matcher = compile.matcher(example);
boolean isMatch = matcher.find();
System.out.println(isMatch);//true

使用group方法来提取匹配结果

String regular = "^/(?<org>[^/]+)/(?<app>[^/]+)/pattern";
String example = "/org/app/pattern123";
System.out.println(example.matches(regular));//false

Pattern compile = Pattern.compile(regular);
Matcher matcher = compile.matcher(example);
boolean isMatch = matcher.find();
System.out.println(isMatch);//true
System.out.println(matcher.group(0));// /org/app/pattern
System.out.println(matcher.group(1));//org
System.out.println(matcher.group(2));//app
System.out.println(matcher.group("app"));//app
System.out.println(matcher.group("org"));//org

标签:Java,String,正则表达式,System,regular,使用,println,example,out
From: https://www.cnblogs.com/MorningBell/p/16644387.html

相关文章

  • Redis使用 Redis封装
    封装Redis:一、application.properties:#过期日期:10800秒(3分钟)PitND.expire.pro=10800二、MainEventHERDMRedis.java:importorg.springframework.beans.facto......
  • C#中委托的使用
    一、简介简单记录一下在c#中,委托的使用方法二、委托2.1委托是什么?委托是一个类,可以将方法当作参数进行传递,保存对函数的引用。可以将委托看成执行方法的一个东西。2.......
  • 【学习底层原理系列】Java底层-synchronized锁-3轻量级锁篇
     一.上一篇回顾1.偏向锁中的批量撤销和批量重偏向2.偏向锁发生了竞争,锁就要升级二.轻量级锁拆解1.加锁流程构建LockRecord,将LockRecord的obj指向当前锁对象,然后将无......
  • 【Java基础】类的结构之一:属性(变量)
    1.成员变量与局部变量二者的区别成员变量局部变量声明的位置直接声明在类中方法形参或内部、代码块内、构造器内等修饰符private、public、static、fin......
  • 使用OpenMMLab系列的开源库时,常用的脚本合集。
    使用OpenMMLab系列的开源库时,常用的脚本合集。开源仓库:gy-7/mmlab_scripts脚本解释:anchor_visiual.py生成的锚框可视化aug_test.py自动数据增强,单文件可视化效果......
  • vue中Promise的使用方法详情
    vue中Promise的使用方法详情目录一、使用1.promise是一种异步解决方案2.asyncawait简介:promise是什么,它可以说是异步编程的一种解决方法,就拿传统的ajax发请求来说,单个......
  • vue3 使用element-plus 按需引入
    1:npminstallelement-plus--save2:组件按需引入所需插件:unplugin-auto-import、unplugin-vue-components图标按需引入所需插件:unplugin-auto-import、unplugin-......
  • java中的一维数组数组
    数组(array):是一种用于存储多个相同数据类型的存储模型(可以理解为容器)数组定义和静态初始化数组的两种定义格式:  格式1:    数据类型[]变量名;    范例......
  • 【Java基础】匿名对象
    1.匿名对象在创建对象时,没有显式的赋给一个变量名,匿名对象只能调用一次。Phonephone=newPhone();//正常的对象mail.show(phone);mall.show(newPhone());2.......
  • SocketLog 的基本使用
    前言:    最近在封装一个日志类时,想借鉴一下TP的实现方式,特别注意了一下TP日志的驱动。平时常用文件形式记录日志却忽略了还有一个Socket方式,只需要连接一下......