正则表达式:
  
  1. 元字符(*、?、+)和文字字符组成
  
  2. #匹配的是一个位置
       脱字符号(^) : 行开始
       美元符号($) : 行结束   
     
  3. #匹配若干字符之一,字符间是‘或’关系,字符组内部和外部,元字符的定义和意义不同
     #一个字符组只能匹配目标文本中的单个字符
     字符组[]
     连字符‘-’,在[]中间,表示范围
     
  4.  排除型字符组(不希望匹配的字符)
        [^]
   
  5.  . 匹配任意字符的字符组
  
  6.   多选结构,匹配任意子表达式 |, 可以匹配任意长度的文本(区别于字符组)
          gr[ea]y、 gr(e|a)y意义相同,
          gr[e|a]y中,|表示普通字符,和前两者的意义不同
          gre|ay表示gre或ay
   
  7. java正则表达式:
          (?i)abc 表示abc都忽略大小写
          a(?i)bc 表示bc忽略大小写
          a((?i)b)c 表示只有b忽略大小写
   
  8.  单词分界符
              #部分不支持\<、\>
                \< 单词的起始位置
                \> 单词的结束位置
                \b
   
  9.  ? 表示可选项 u?:表示u可以出现一次也可以不出现
  
  10. + 表示之前紧邻的字符出现一次或多次
  
  11. * 表示之前紧邻的字符出现任意多次或不出现
  
  12. 空格也是普通字符, ( 、)表示元字符
  
  13. 重现次数的范围:区间 {min,max}
  
  14. 反向引用 表示匹配与表达式先前部分匹配的同样的文本
             ([a-z])([0-9])\1\2 : \1表示[a-z]匹配的内容,\2表示[0-9]匹配的内容
  15. \ + 元字符 表示对元字符进行转义
  16.  (?:....) 表示只分组不捕获,即非捕获型括号
  
  17.        \s  表示匹配所有'空白'
               \S  除\s之外的任何字符
               \r  回车符
               \w  [a-zA-Z0-9]
               \W  [^a-zA-Z0-9]
               \d
                \D
   
   
  18.   正则表达式环视结构,不匹配任何字符,只匹配文本中的特定位置
                肯定型顺序环视 (?=...)
                        (?=\d) : 匹配当前位置的右边是数字
                逆序环视(?<=...),从右向左查看文本
                        (?<=\d),匹配当前位置的左边有一位数字
                否定顺序环视(?!...) 子表达式不能匹配右侧文本
                否定逆序环视(? 
  19.  (?<=\d)(?=(\d\d\d)+$) : 只有一个捕获型括号即:(\d\d\d)
  
  20.  (?<=\d)(?=(\d\d\d)+$)\1 : \1即指捕获型括号(\d\d\d)
  
  21.   java中获取第一组括号匹配的文本
               matcher.group(1);
    
  22.   条件判断(?if  then|else)
              (?(?<=NUM:)\d+|w+) : 表示当前位置的左边是NUM:时,则匹配后面跟一位数字,否则在其他位置尝试使用\w
  
  
  23.   匹配优先量词 + ? * {min, max}
            匹配有上限和下限,但是尽可能的匹配多的内容
  
  24.   忽略优先量词,即匹配尽可能少的内容,只需要满足下限,匹配就可以成功
            *? +? ?? {min, max}? 
    
  25.   占有优先量词: *+ ++ ?+
  
  26.   优先选择最左端的匹配结果
  
  27.   标准量词是优先匹配的
  
  28.   java
               (1).字符组内部\b表示退格,其他地方均表示单词分界符 (\b  \B)
    
               (2). \G当前匹配的起始位置
    
               (3). (...)  \1 \2 捕获型括号
    
               (4). (?:...) 仅分组的括号
    
               (5). Pattern p = Pattern.complie(regx);
    
               (6). Matcher.usePattern(),修改对应的Pattern
    
               (7). 重置Matcher匹配器 matcher.reset(); matcher.reset(text);
                    给当前的Matcher对象配上个新的目标,目标是就该方法的参数;如果不给参数,reset会把Matcher设到当前字符串的开始处。
    
               (8). 修改目标字符串的检索范围(region)
    
                (9). 当前Pattern的捕获型括号的数目,通过matcher.groupCount()获得
    
                (10). matcher.find() 能否找到匹配
                      部分匹配,从当前位置开始匹配,找到一个匹配的子串,将移动下次匹配的位置
    
               (11). matcher.matches() 表示matcher的正则表达式能否完全匹配目标字符串中当前检索范围的那段文本 整个匹配,只有整个字符序列完全匹配成功,才返回True,否则返回False。但如果前部分匹配成功,将移动下次匹配的位置。
    
              (12). matcher.lookAt() 
                   部分匹配,总是从第一个字符进行匹配,匹配成功了不再继续匹配,匹配失败了,也不继续匹配。
      
              (13). matcher.replaceAll(replacement)
                  matcher能够匹配的文本,都会被替换为replacement
      
              (14). matcher.replaceFrist(replacement)
                   只对第一次匹配,进行替换
      
              (15). matcher.quoteReplacement(String text)
                     对text中存在的特殊字符,进行转义,范围转义后的字符串
      
              (16). replacement,中含有'$1',则替换为对应编号的捕获型括号匹配的文本,'$0',替换所有匹配的文本
    
              (17). appendReplacement(StringBUffer sbf, String replacement)
                     将原始目标字符串匹配之前的文本和replacement,存入sbf中
      
              (18). appendTail(StringBuffer sbf)
                    找到所有匹配后,将目标字符串中剩下的文本,存入sbf中