黑马程序员 JAVA学习笔记 —— 正则表达式

android培训、java培训、期待与您交流! 

正则表达式:既是一种规则的表达式
作用:用于操作字符串 将用对字符串操作的代码用一些符号来表示。只要使用了指定符号,就可以调用底层的代码对字符串进行操作。符号的出现,简化了代码的书写。
学习正则表达式就是在学习 特殊符号的使用。
好处:可以简化代码的书写
坏处:阅读性比较差

正则表达式的构造摘

摘自 API1.6
构造 匹配
 
字符
x 字符 x
\\ 反斜线字符
\0n 带有八进制值 0 的字符 n (0 <= n <= 7)
\0nn 带有八进制值 0 的字符 nn (0 <= n <= 7)
\0mnn 带有八进制值 0 的字符 mnn(0 <= m <= 3、0 <= n <= 7)
\xhh 带有十六进制值 0x 的字符 hh
\uhhhh 带有十六进制值 0x 的字符 hhhh
\t 制表符 ('\u0009')
\n 新行(换行)符 ('\u000A')
\r 回车符 ('\u000D')
\f 换页符 ('\u000C')
\a 报警 (bell) 符 ('\u0007')
\e 转义符 ('\u001B')
\cx 对应于 x 的控制符
 
字符类
[abc] ab 或 c(简单类)
[^abc] 任何字符,除了 ab 或 c(否定)
[a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围)
[a-d[m-p]] a 到 d 或 m 到 p[a-dm-p](并集)
[a-z&&[def]] de 或 f(交集)
[a-z&&[^bc]] a 到 z,除了 b 和 c[ad-z](减去)
[a-z&&[^m-p]] a 到 z,而非 m 到 p[a-lq-z](减去)
 
预定义字符类
. 任何字符(与行结束符可能匹配也可能不匹配)
\d 数字:[0-9]
\D 非数字: [^0-9]
\s 空白字符:[ \t\n\x0B\f\r]
\S 非空白字符:[^\s]
\w 单词字符:[a-zA-Z_0-9]
\W 非单词字符:[^\w]

具体操作功能:
1.匹配:String matches方法 用于规则匹配整个字符串 只要有一处 不符就匹配结束返回false
例:

public  static  void  main( String[]  args)  {
         // TODO Auto-generated method stub
         String  nub  =  "19"; //
         String  rul  =  "[1][9]"; //
         String  rul1  =  "[1][7]"; //
         boolean  b  =  nub. matches( rul);
         boolean  b1  =  nub. matches( rul1);
         System. out. println( b + "  " + b1); //
        
    }
 注:一个[ ]对应字符串中的一位。

有第一个[1]与字符串中第一位1对应所以继续匹配[9]与9匹配所以b返回true b1返回false

2.分割:String split方法 用于规则分割字符串 
 
public  static  void  main( String[]  args)  {
         // TODO Auto-generated method stub
     String  s0 = "Gandam    Gandam_Z      Gandam_ZZ"; //
     String  s1 = "nihao,woshi,lihaiyun"; //
     String  s2 = "bbs.itheima.com"; //.
     String  s3 = "E:\\\\"; //
     String  s4 = "qwerwwkfxxpoffaq"; //
     String  rul0 = " +";
     String  rul1 = ",";
     String  rul2 = "\\.";
     String  rul3 = "\\\\";
     String  rul4 = "(.)\\1";
     String[]  arr = s0. split( rul0);
     show( arr);
     arr = s1. split( rul1);
     show( arr);  
     arr = s2. split( rul2);
     show( arr);  
     arr = s3. split( rul3);
     show( arr);  
     arr = s4. split( rul4);
     show( arr);  
    }
     static  void  show( String[]  x)
    {  for( String  test: x)
    { System. out. println( test);}}
}
 
注: +表示一次或多次出现 我前面打了空格 代表  空格一次或多次出现  
//.第一个/表示在字符串中的转义第二个表示正则表达式的转义
()表示组 .表示任意字符 /1表示引用第一个组
Greedy 数量词
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次
引用
\ Nothing,但是引用以下字符
\Q Nothing,但是引用所有字符,直到 \E
\E Nothing,但是结束从 \Q 开始的引用

 3.替换 String replaceAll方法 用于规则替换字符串
 
public  static  void  main( String[]  args)  {
         // TODO Auto-generated method stub
     String  s0 = "a1d3qw45646q4d56q1wd53s1a5wdq313";
     s0 = s0. replaceAll( "\\d+", "a"); //a
     System. out. println( s0);
}
 如果只是把数字替换掉可以去掉加号
 
 
String  s0 = "a1d3qw45646q4d56q1wd53s1a5wdq313";
     s0 = s0. replaceAll( "\\d+", "a"); //a
     System. out. println( s0);
     s0 = s0. replaceAll( "(.)\\1", "$1"); //
     System. out. println( s0);
 $表示在正则表达式外获取组
 
4.获取:将字符串中的符合规则的字符串取出。
操作步骤:
1.将正则表达式封装成对象
2.让正则对象和要操作的字符串相关联
3.关联后,获取正则匹配引擎
4.通过引擎对符合规则的字符串进行操作 
 
public  class  maches {
     /**
     *  @param  args
     *  @throws  ClassNotFoundException 
     */
     public  static  void  main( String[]  args)  {
         // TODO Auto-generated method stub
     String  s = "ming tian yao qu hei ma la";
     String  rul = "\\b[a-z]{3}\\b";
     Pattern  p = Pattern. compile( rul); //
     Matcher  m = p. matcher( s); //
     //Stringmatchespatternmatcher  
     //
     while( m. find())
    { System. out. println( m. group() + " " + m. start() + "..." + m. end());}
    }
 注:/b表示单词边界。find表示 将规则作用到字符串上,并进行符合规则的字串查找。  group表示 得到第一个符合规则正则的字串。并返回。start end表示得到 符合规则正则的字串的起始下标 和结束下标

正确使用正则表达式的方法
1.如果只想知道该字符是否对错 使用匹配
2.想要将已有的字符串变成另一个字符串 替换
3.想要按照自定义的方式将字符串变成多个字符串 用切割 获取规则以外的字符串
4.想要拿到符合要求的字符串 用获取 获取符合规则的字符串

总而言之正则表达式 作为字符串操作工具十分的便捷 就是时间格的久了 再看会比较麻烦 学起记得符合很多 但熟练以后会发现比起String里的方法好用多了 特便是简化代码方面。


android培训、java培训、期待与您交流!

你可能感兴趣的:(黑马程序员 JAVA学习笔记 —— 正则表达式)