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

本文深入探讨了正则表达式在Android与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,但是引用以下字符
\QNothing,但是引用所有字符,直到 \E
\ENothing,但是结束从 \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培训、期待与您交流!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值