Java中的正则表达式

正则表达式:就是字符串中字符出现的规则。

何时使用:验证一个字符串的格式/查找一篇文章中的关键字。

基本正则表达式:

  1. 最简单的正则表达式,就是关键词本身,如:”和谐”,”政府”等。
  2. 包含模式匹配符号的正则表达式。如:

    正则表达式:”[a-z]”表示a到z的任意一个字符

    正则表达式:”[a-z]+”表示由一个或多个a-z字符组成的字符串

    如:我[去草],可以匹配:我去,我草;但不能匹配:我去草。

      我[去草]+,可以匹配:我去,我草,我去草,我草草,我去去等

 

  • 字符集合  
  • 正则表达式 说明
    [abc] a、b、c中任意一个字符
    [^abc] 除了a、b、c的任意字符
    [a-z] a、b、c、...、z中任意的一个字符
    [a-zA-Z0-9] a~z、A~Z、0~9中任意一个字符
    [0-9&&[^47]] 0~9中除了4和7以外的任意一个字符,其中&&表示”与”的关系

 

注意:^仅在放在首位时代表除……之外,如果给^前加上其他字符,则其失效,变为普通字符;如:正则表达式”[12^34]”表示1、2、^、3、4中的任意一个字符而不是1、2或除3、4外的字符。

 

 

  • 预定义字符集

  预定义字符集:就是将常用正则表达式简化为预定义的专门字符,即简化正则表达式用的特殊字符。

  • 正则表达式 说明
    . 任意一个字符
    \d 任意一个数字字符,相当于[0-9]
    \w 单词字符,相当于[a-zA-Z0-9_]
    \s 空白字符,相当于[\t\n\x0B\f\r]
    \D 非数字字符
    \W 非单词字符
    \S 非空白字符

 

 

注意:空白字符并不只是指空格,还包括制表符等。

 

 

 

 

  • 数量词
  • 正则表达式 说明
    X? 表示0个或1个X,如:我了?去
    X* 表示0个或任意多个X,如:我[了个]*去
    X+ 表示1个到任意多个X(大于等于1个X)
    X{n} 表示n个X
    X{n,} 表示n个到任意多个X(大于等于n个X)
    X{n,m} 表示n个到m个X(含头含尾)

  

 

 

 

 

 

 

  如:QQ号码目前为5-12位的数字,验证QQ号码的正则表达式应该为:"\d{5,12}"。

    座机号:3-4位区号,后跟-,后跟7-8位座机号,故验证座机号的正则表达式应该为:"\d{3,4}-\d{7,8}"。

  • 表达式分组

  分组:使用圆括号()分割正则表达式为多个子表达式。子表达式构成一个小整体。

  为什么要对正则表达式分组?和数学公式一样。数学中的复杂公式,都会用圆括号分组公式中的各个部分,表示公式的逻辑结构,并控制计算的顺序。

  什么时候使用?当正则表达式过于复杂,需要区分逻辑结构、避免歧义时。

    如:检索手机号码:+86 13501234567

              +86 可有可无       

              +86与后面的号码之间空格可以没有或者有多个        *

              电话号码为11位数字

                        故检索手机号码的正则表达式为:"(\+86)?\s*\d{11}"。

  分组时可以使用 ”|” 表示 ”” 关系,例如:匹配手机号码前面的区号:

       (\+86|0086)表示:可以匹配”+86”或者”0086”

 

posted on 2016-02-04 10:48  木杉彬彬彬  阅读(266)  评论(0编辑  收藏  举报