zoukankan      html  css  js  c++  java
  • 在Java中如何使用正则表达式


    title: 在Java中如何使用正则表达式
    date: 2020-01-09 21:52:41
    tags: JavaSE
    categories: JavaSE


    前言

      最近放寒假了,时间比较多,终于有时间继续研究Java的基础知识。这几天在看《Java编程思想》这本书,刚好看完了正则表达式这一张章节,写一遍博客记录以下,防止忘记(虽然还是会忘记)


    介绍

    什么是正则表达式?

      正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符")。正则表达式使用单个字符串描述、匹配一系列符合某个句法规则的字符串(CV大法)。

      说白了,正则表达式就是定义字符串的规则。我们使用正则表达式,为字符串定义一个规则,比如我们定义一个正则表达式,表示一个只由数字组成,长度任意的字符串,然后,我们就可以用这个正则表达式去匹配任意字符串,看这个字符串是否匹配这个规则。


    在Java中如何使用正则表达式?

      正则表达式的语法我这里就不提了,太多太杂,不会的可以去菜鸟教程看看,我这里主要就是写写在Java中如何使用正则表达式。

      在Java中使用正则表达式,首先得知道两个类,一个叫做Pattern,一个叫做Matcher,这两个类都是java.util.regex包下的,这个包下也就这两个类。

    Pattern类

      Pattern类是用来干嘛的呢,其实我们可以把他简单理解为就是一个正则表达式(就像File类一样,我们可以简单理解为它就是一个文件)。Pattern类没有公共的构造方法,这意味着我们不能直接new一个Pattern类的对象。在这个类中,提供了一个方法,名字叫compile,我们将正则表达式作为参数,传入这个方法中,就可以得到一个Pattern对象,我们可以将这个对象理解为就是传入的正则表达式。

      Pattern类有一个实例方法,叫做matcher,这个方法接收一个参数,就是需要匹配的字符串,方法的返回值就是一个Mather对象。

    Matcher类

      Matcher类又是用来干嘛的呢?Matcher这个单词翻译过来就是匹配器的意思,一个Matcher对象就是一个匹配器,我们通过这个匹配器,就可以操作正则表达式与字符串的匹配过程。操作的是哪个正则表达式和字符串呢?就是我们调用Pettern类的compile方法生成的Pettern对象,以及调用Pettern对象的matcher方法传入的要匹配的字符串。通过这个匹配器对象,我们可以控制字符串的匹配,查看匹配结果,甚至可以替换等便利的操作。


    代码

    正则表达式小demo

      下面我们看一个简单的小demo:使用正则表达式,匹配字符串中所有数字部分,输出匹配的部分,以及匹配的部分在原字符串中的位置

    public static void main(String[] args) throws FileNotFoundException {
    		
        // 使用Pattern类的compile方法,传入一个正则表达式,得到一个Pattern对象
        Pattern pattern = Pattern.compile("[0-9]+");
        // 调用pattern对象的matcher方法,传入需要匹配的字符串, 得到一个匹配器对象
        Matcher matcher = pattern.matcher("abcd123acca123a1a2");
    
        // 从字符串开头,逐一向后匹配,直到无法再匹配为止
        while(matcher.find()) {
            // 输出上一次匹配的内容
            System.out.print(matcher.group() + ":  ");
            // 输出上一次匹配的首尾索引
            System.out.println(matcher.start() + "->" + (matcher.end()-1) );
        }
    }
    

      上面的代码首先使用Pattern类的compile方法,传入一个正则表达式,得到一个Pattern对象,[0-9]+这个表达式的意思就是任意长度,且仅由0-9组成的字符串。得到Pattern对象后,调用它的matcher方法,传入需要匹配的字符串,即可得到一个匹配器,也就是Matcher对象。

      得到这个Matcher对象后,就可以进行匹配操作了。在上面的代码中,调用了find方法进行匹配。find方法的作用就是尝试从字符串中找到下一个匹配正则表达式的部分,若匹配成功,就返回true,否则返回false,而已经匹配的部分会被跳过。Matcher对象的group()方法返回上一次匹配的部分,而start()方法返回上一次匹配部分的开始索引,end()方法返回上一次匹配部分的结束索引+1的值。我们在while循环的条件中调用find方法进行匹配,若匹配成功,则输出上次匹配的部分,以及匹配部分在原字符串中的位置。例如上面的代码,输出结果如下:

    123:  4->6
    123:  11->13
    1:  15->15
    2:  17->17
    

    总结

      上面描述了PatternMatcher类最基本的操作,但是这两个类的作用远不止如此,它们还可以进行很多方便的操作,比如替换操作等,但是这里就不一一描述了,有时间再慢慢补充。


    参考

    《Java编程思想》

  • 相关阅读:
    JVM Specification 9th Edition (1) Cover
    《数据库设计入门经典》读书笔记——第一章:数据库建模的过去与现在
    Fly (From Wikipedia)
    centos 6.5 安装mysql 5.7.21 community
    数据库设计(七)第三范式(3NF)
    记录一次OOM排查经历(一)
    jpa中时间戳格式应该用哪种类型
    mybatis generator如何定制JavaTypeResolver,使smallint类型的数据库字段在po中的类型为Integer?
    jenkins部署war包到远程服务器的tomcat
    Jenkins踩坑系列--你试过linux主机ssh登录windows,启动java进程吗,来试试吧
  • 原文地址:https://www.cnblogs.com/tuyang1129/p/12174161.html
Copyright © 2011-2022 走看看