Java的正则表达式(RegularExpressions)

最近突然想起来以前学的乱七八糟的正则表达式,所以现在巩固一下。


   首先要明确一点  正则表达式是一门新的语言,而非只属于Java。

   (本文也不太适合初学者看,还是先百度一些基础再来看看比较好) 


java的正则表达式涉及到2个类,分开来说。

1.Pattern    这个类是一个规则,或者说是一个表达式。

2.Matcher  这个类是一个结果,或者说结果集。

(以上两点 ---  也许事实并不是这样的,犹豫比较复杂,不深入讨论)


首先熟悉一下常用的符号,这些符号非常好找,只要百度你就可以找到一大堆。我挑一些重要的记录下:

              *                            +                          ?                             [ ]                             { }                           ( )    

          0个或多个         1个或多个            1个或0个               表示范围        表示匹配次数             表示分组


         而在[ ]符号中,表示范围时,又有3种运算符,如果两个范围直接不写任何符号,则表示是'或'的关系。

         [ ]之中无论有多少个字符,它均代表匹配一个字符!

         例如:

                     "或" 的关系 符号为"|" 或者不写

                     [abc] 则表示匹配一个字符,字符为abc之中任意之一。

                     [0-9a-zA-Z] 则表示匹配0-9,a到z,A到Z的任意之一的字符。

     以下写法等同于:[abc]

               [a|b|c]

                     "非"的关系 符号为"^"

                     [^abc]     匹配除abc之外的字符。

                     "且"的关系 符号为"&"

                     [a-z&abc]  匹配a-z之中的,而且必须是abc之中的。

                      

       {}符号为匹配的次数,它和符号"+","?","*"是等价的,只是含义不同。

        例如:

                  [abc]+          匹配一个或多个 abc之一的结果。

                  a{1}              匹配出现一个a

                  d{1,}             匹配出现一个或者多个数字

                 \d{1,3}          匹配出现一个或大于1个但是小于等于3个数字。          


       接下来是正则表达式的创立者提供的一些简便范围,规定如下

.(点)        匹配             任意字符 

         \d           匹配                [0-9]

         \D          匹配                [^0-9]

         \w          匹配            [a-zA-Z_0-9]

        \W          匹配            [^a-zA-Z_0-9]

         \s           匹配               [ \t\n\f\r]

         \S          匹配                [^ \t\n\f\r]


      接下来是一些特殊字符,比如边界匹配:

         ^        表示行首

        $        表示结尾

        \b       表示单词结尾


       还有一点是需要注意的,对于特殊字符,比如你想匹配“.”(点),但是"."(点)在正则表达式之中有它自己的含义,所以你需要转义,正则表达式中的转义用"\"表示,即你应该写成"\.",但是java中"\"为特殊符号,还需要转义,所以在Java中,所有出现"\"的地方都需要转义,java的转义也是"\",所以“.”你应该写成"\\."。其它包含"\"的地方类似处理。


      会了以上这些规则,现在可以写一些简单的例子了。

      比如这个,用来检查IP地址:

      \\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}

      Java中的写法如下:

    public static boolean checkIp(String ip,String rules){
        Pattern p = Pattern.compile(rules);
        Matcher m = p.matcher(ip);
        return m.matches();
    }



   Pattern利用compile来生成一个规则,Matcher通过Pattern的matcher()方法生成,而Matcher就是一个结果集。

   Matcher的matches()方法就是是否匹配,返回一个布尔类型。


    接下来介绍一个Matcher类的方法:

    reset()           数据指针回滚。(由于Matcher类的matchers,find方法都会导致数据游标指针的滚动,所以此方法表示重置指针)

    find()             匹配子串是否有匹配的结果

    lookingat()   匹配子串是否有匹配的结果,每次都会重头开始寻找。

    start()            匹配子串的起始位置(随指针改变而改变,即每一次find()都会改变这个的值)

    end()             匹配子串的结束位置(随指针改变而改变,即每一次find()都会改变这个的值)

    group()         匹配正则表达式中的分组符号,即"()".默认group的0为整个字符串

   

 例子有时间再上,先写到这吧。欢迎一起讨论。

    

     

  

  


  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值