java 正则表达式

1. 什么是正则表达式

   正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。正则表达式可以用形式化语言理论的方式来表达。正则表达式由常量和算子组成,它们分别指示字符串的集合和在这些集合上的运算

2. 基本语法

   符号

       -----优先级

        * 具有最高优先级 代表前面的字符可以不出现,也可以出现一次或者多次。(0次、或1次、或多次)。例如,「0*42」可以匹配42042004200042

        () 第二优先级  圆括号可以用来定义操作符的范围和优先度。例如,「gr(a|e)y」等价于「gray|grey」,「(grand)?father」匹配fathergrandfather

        |  最低优先级  竖线符代表选择(即并集)。例如「gray|grey」可以匹配grey或gray。 

      -----数量

       +   加号代表前面的字符必须至少出现一次。(1次、或多次)。例如,「goo+gle」可以匹配googlegoooglegoooogle等;

       ?   问号代表前面的字符最多只可以出现一次。(0次、或1次)。例如,「colou?r」可以匹配color或者colour

       *   星号代表前面的字符可以不出现,也可以出现一次或者多次。(0次、或1次、或多次)。例如,「0*42」可以匹配42042004200042等。

       {n}  n是一个非负整数。匹配确定的n次。例如,「o{2}」不能匹配「Bob」中的「o」,但是能匹配「food」中的两个o。

      {n,}  n是一个非负整数。至少匹配n次。例如,「o{2,}」不能匹配「Bob」中的「o」,但能匹配「foooood」中的所有o。「o{1,}」等价于「o+」。「o{0,}」则等价于「o*」。

      {n,m}   m和n均为非负整数,其中n<=m。最少匹配n次且最多匹配m次。例如,「o{1,3}」将匹配「fooooood」中的前三个o。「o{0,1}」等价于「o?」。请注意在逗号和两个数之间不能有空格。

   比如

    (ab)c == abc

    a|(b(c*)) ==  a|bc*

       a|b*    代表  {a , "" (空), bbbbbb, ...}

      (a|b)*   代表   由包括空串、任意数目个ab字符组成的所有字符串的集合

    ab*(c|ε) 代表  开始于一个a接着零或多个b和最终可选的一个c的字符串的集合

3. 正则上组的概念 

    例如  ((A)(B(C)))  

    第0组  ((A)(B(C)))

    第一组  ((A)(B(C)))

    第二组  (A)

    第三组  (B(C))

    第四组 (C)

4. java上应用

  等价于

 

  表示用 规则 a*b a可以出现0~n去匹配字符串"aaaaaab"

 

输出为:

 

  

posted @ 2017-10-12 13:23  戴杭林  阅读(302)  评论(0编辑  收藏  举报