首页 > 编程语言 >JAVA:正则表达式匹配

JAVA:正则表达式匹配

时间:2024-07-22 09:51:23浏览次数:12  
标签:输出 0918 匹配 结果 正则表达式 TEST JAVA match

1. 非捕获组(?:)

/**
 * 根据正则表达式找到字符串中符合条件的字符段,并输出到控制台
 */
public static void match(String regex, String str) {
  Pattern pattern = Pattern.compile(regex);
  Matcher matcher = pattern.matcher(str);
  while (matcher.find()) {
      System.out.println(matcher.group());
  }
}

非捕获组会输出整个正则表达式匹配到的内容,例如:a(?:b)c,会输出匹配结果为:abc
正常使用时也可以省略?:,例如:TEST-(?:[0-9]+)可以直接写作TEST-([0-9]+)

public static void main(String[] args) throws Exception {
    //输出结果:TEST-0918
    match("^TEST-(?:[0-9]+)$", "TEST-0918"); 

    //输出结果:无
    match("^TEST-(?:[0-9]+)$", "TEST-0918-ABC");

    //输出结果:TEST-0918
    match("TEST-(?:[0-9]+)", "TEST-0918");

    //输出结果:TEST-0918
    match("TEST-([0-9]+)", "TEST-0918");

    //输出结果:TEST-0918
    match("TEST-(?:[0-9]+)", "TEST-0918-ABC");

    //输出结果(找到两组符合要求的字符串):TEST-0918、TEST-1
    match("TEST-(?:[0-9]+)", "TEST-0918-ABC-TEST-1");
}

2. 正向肯定预查(?=)

?=只会输出匹配到的符合规则的正则前面部分结果,例如:abc(?=d),匹配结果为:abc,不会输出?=d中的d

public static void main(String[] args) throws Exception {
    //输出结果:TEST-
    match("TEST-(?=[0-9]+)", "TEST-0918");
}

3. 正向否定预查(?!)

?!?=匹配规则类似,匹配结果都只是匹配的前面部分,?!表示不符合后面表达式的结果,例如:abc(?!d),表示abc后面一个字符不是d的情况。

public static void main(String[] args) throws Exception {
    //输出结果:无
    match("TEST-(?![0-9]+)", "TEST-0918");

    //输出结果:TEST-
    match("TEST-(?![0-9]+)", "TEST-ABC");
}

4. 反向肯定预查(?<=)

?<=表示反向肯定预查,匹配以某个正则开头的字符串,例如:(?<=a)bc,表示匹配以a开头的bc字符串,匹配结果:bc

public static void main(String[] args) throws Exception {
    //输出结果:TEST-
    match("(?<=[0-9]+)-TEST", "0918-TEST");

    //输出结果:无
    match("(?<=[0-9]+)-TEST", "ABC-TEST");
}

5. 反向否定预查(?<!)

?<!表示反向否定预查,匹配不以某个正则开头的字符串,例如:(?<!a)bc,表示匹配不是以a开头的bc字符串,匹配结果:bc

public static void main(String[] args) throws Exception {
    //输出结果:无
    match("(?<![0-9]+)-TEST", "0918-TEST");

    //输出结果:TEST-
    match("(?<![0-9]+)-TEST", "ABC-TEST");
}

6. 其它正则匹配示例

  • 匹配以.txt结尾的字符串:.*\\.txt
  • 匹配不以.txt结尾并且以一位数字开头的字符串:(?!.*\.txt)[0-9].*,其中(?!.*\.txt)表示不以.txt结尾,[0-9].*表示以一位数字开头。

标签:输出,0918,匹配,结果,正则表达式,TEST,JAVA,match
From: https://www.cnblogs.com/wzlfm/p/18311812

相关文章

  • IntelliJ IDEA 中 右键新建时,选项没有Java class的解决方法和具体解释
    右键新建没有java文件具体的解释和解决方案。 如上图红圈所示,我们可以根据对项目的任意目录进行这五种目录类型标注,这个知识点非常非常重要,必须会。Sources 一般用于标注类似 src 这种可编译目录。有时候我们不单单项目的 src 目录要可编译,还有其他一些特别的目录......
  • 运用Java打印金字塔
    1publicclassexercise05{2publicstaticvoidmain(String[]args){3//思路分析4//化繁为简5//1.打印一个矩形6//*****7//*****8//*****9//*****10//*****11//2.打印半个金字塔12//*//第一层有1个*13//**//......
  • Java开发者快速上手.NET指南
    前言最近有不少Java开发者、应届生加入了我们的DotNetGuide技术社区交流群(前5个群都已满500人,6群也即将满500人),经常看到有小伙伴在群里问:想要快速上手开发.NET有什么好的学习教程和资料可以参考借鉴的?今天大姚给大家分享一下Java开发者想要快速上手.NET有哪些教程和优质资料,希......
  • Python - for循环不使用正则表达式附加数组
    以下代码从URL获取版本号,然后对于每个版本号,转到该版本号的页面并使用文件名的特定模式填充数组。生成的数组应包含每个版本号的文件名列表,但它似乎只包含早期版本(2.6)。使用print语句,我可以看到代码的工作原理是它获取sha256sums.asc文件-所有这些文件,所有版本。我猜......
  • 【效率提升】正则表达式和通配符
    为什么推荐正则表达式它具有强大的搜索匹配能力,能够模糊搜索到任何你能记忆到的东西;对于Linux的shell脚本以及诸多bash命令,它们中的大多数都支持正则表达式,并且Python中的re库就是有关正则表达式的,以及之后会推荐的everything本地文件搜索软件也支持正则表达式,它能够让你......
  • Java--接口
    目录语法规则例子实现多个接口接口之间的继承抽象类和接口的区别在现实生活中,接口的例子比比皆是,比如:电源插座,主机上的USB接口等。这些插口中可以插所有符合规范的设备。通过这个例子我们知道,接口就是公共的行为规范标准,大家在实现时,只要符合规范标准,就可以通用。在jav......
  • rabbitmq发送消息localdatetime报错:Java 8 date/time type `java.time.LocalDateTime`
    两种解决方案:通过全局配置LocalDateTime的序列化/***json序列化增强解决Jackson序列化不了Java8日期*/@BeanpublicMessageConvertermessageConverter(){ObjectMapperom=newObjectMapper();om.setVisibility(PropertyAccessor.ALL,JsonAut......
  • [Java源码]Object
    ClassObjectjava.lang.ObjectpublicclassObjectClassObjectistherootoftheclasshierarchy.EveryclasshasObjectasasuperclass.Allobjects,includingarrays,implementthemethodsofthisclass.Since:JDK1.0SeeAlso:ClassConstructorSumm......
  • Java学习日历(继承,多态)
    继承中成员变量访问特点:就近原则System.out.println(name)System.out.println(name)Sytem.out.println(this.name)从本类成员变量开始往上找Sytem.out.println(super.name)从父类成员变量开始往上找packageExtends;classStudent{publicvoideat(){System......
  • Java流的概念及API
    流的概念 流(Stream)的概念代表的是程序中数据的流通,数据流是一串连续不断的数据的集合。在Java程序中,对于数据的输入/输出操作是以流(Stream)的方式进行的。可以把流分为输入流和输出流两种。程序从输入流读取数据,向输出流写入数据。Java中的流可以按如下方式分类:按流的方......