黑马程序员——04 高新技术(一)关于正则表达式的理解和常用方法

来源:互联网 发布:网络拓扑分层的好处 编辑:程序博客网 时间:2024/06/10 02:25

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


      正则表达式的出现是为了使程序员能够更加简便的操作字符串,就是一种事先规定好的规则,它的优点在于代码简洁,它通过一些特定的符号来体现,但是阅读性变差了.

例如:String Regex = "[0-9 ]";

1.正则表达式需要记住的特定符号所代表的含义,只有记住了这些才能熟练地使用正则表达式。

1.1 字符   

 \\反斜线字符             前一个\代表转义

1.2 字符类(最常用的)

[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](减去)

1.3 预定义字符类

.任何字符(与行结束符可能匹配也可能不匹配)\d数字:[0-9]\D非数字: [^0-9]\s空白字符:[ \t\n\x0B\f\r]\S非空白字符:[^\s]\w单词字符:[a-zA-Z_0-9]\W非单词字符:[^\w]

1.4 Greedy 数量词

X?X,一次或一次也没有X*X,零次或多次X+X,一次或多次X{n}X,恰好 n 次X{n,}X,至少 n 次X{n,m}X,至少 n 次,但是不超过 m 次

2. 正则表达式的分组概念

  ( )就是正则表达式中的封装格式,称之为组,每个组都有编号,默认编号从1开始。

  它的使用是通过 "\\组的编号来使用的"。

  例如,正则表达式中(.)表示将任意一个字符封装成组或者说是一个对象,字符串中\\1就是对这个对象的复用1   次,注意的是这里的1代表的是组的编号而不是复用次数,想要复用多次可以写作\\1+.

[java] view plaincopy
  1. String str = "abcdddeffgggghhhhh";  
  2. String regex1 =  ".";          //"."和(.)代表的意思是相同的  
  3. String regex2 = "(.)\\1";      // 复用了1次  
  4. String regex3 = "(.)\\1+";     //复用了1次或多次  
  5. String[] strs1 = str.split(regex1);//全被切割了所以没内容  
  6. String[] strs2 = str.split(regex2);//相当于按照两个相同字符来切割的,打印结果abcdeh  
  7. String[] strs3 = str.split(regex3);//按至少2个相同的字符打印,打印结果abce  

3. 正则表达式的4中常用操作
3.1 匹配

      其实使用的就是String类中的matches(String regex)方法,regex为正则表达式,如果匹配规则就返回true。

      返回值为String类型。

      如检验手机号是否正确,要求位数为11位,第一位必须是1,第二位为3、5、8中的其中一个,后9位只要是数字 就可以。

[java] view plaincopy
  1. String telNum1 = "13855555501";  
  2. String telNum2 = "05855555501";  
  3. String telNum3 = "138555555018000000";  
  4.       
  5. String regex = "1[358][0-9]{9}";//规定规则,意义对应:1--第一位为1;[358]第二位为358之一  
  6.                                      // [0-9]{9}连续校验9次,为数字即可。  
  7.       
  8. boolean b1 = telNum1.matches(regex);//返回true  
  9. boolean b2 = telNum2.matches(regex);//返回false  
  10. boolean b3= telNum3.matches(regex);//返回false  

3.2 切割

      其实使用的就是String的split(String regex)方法。返回值为String[ ]类型。

[java] view plaincopy
  1. String str = "abcdddeffgggghhhhh";  
  2.   
  3. String regex2 = "(.)\\1";// 复用了1次,代表将2个重复的切割  
  4. String regex3 = "(.)\\1+";//复用了1次或多次,代表将2个以上重复的切割  
  5.   
  6. String[] strs2 = str.split(regex2);//相当于按照两个相同字符来切割的,打印结果abcdeh  
  7. String[] strs3 = str.split(regex3);//按至少2个相同的字符打印,打印结果abce  

3.3 替换

       其实就是使用了String的replaceAll(String regex, String str)方法,第一个参数就是正则表达式,规定要什么样的  位置需要替换,第二个参数表示所要替换成的表达式。返回值为String类型。

        例如如何将手机号的的4-7为屏蔽成****,思路就是:先将1-3位和8-11位分别封装成两个组,再将中间的4-7位替换成*,另外两组的内容不变($1 代表使用获得的第1组对象内容)。

[java] view plaincopy
  1. String telNum1 = "13855555501";  
  2. String str1 = telNum1.replaceAll("(\\d{3})\\d{4}(\\d{4})""$1****$2");  
  3. System.err.println(str1);//返回结果为138****5501  

3.4 获取字符串中符合正则规则的内容

      步骤:

               1.将正则规则封装成对象

                  Pattern p = Pattern.compile(regex);

[java] view plaincopy
  1. String  str = "good good study , day day up! ";  
  2.         String regex = "\\b[a-z]{3}\\b";   //  \\b 为单词边界  
  3.         Matcher m = Pattern.compile(regex).matcher(str);  
  4.         while(m.find())  
  5.         {  
  6.             System.out.print(m.group());  // 输出为 day day  
  7.         }  


 

                2.创建一个匹配器,通过正则对象的matcher方法。

                  Matcher m = p.matcher(被操作字符串);

                3.通过匹配器对象的方法对字符串进行操作
                   如先通过m.find()查找与该模式匹配的输入序列的下一个子序列,他返回boolean

                   再通过m.group()返回子序列。

                   while(m.find)

                    {      m.group;     }

      举例:返回下列字符串中由三个字母所组成的单词。

      

[java] view plaincopy
  1. String  str = "good good study , day day up! ";  
  2. String regex = "\\b[a-z]{3}\\b";   //  \\b 为单词边界  
  3. Matcher m = Pattern.compile(regex).matcher(str);  
  4. while(m.find())  
  5. {  
  6.     System.out.print(m.group());  // 输出为 day day  
  7. }  


 



 

    



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

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 换新手机后微信头像都没有了怎么办 苹果系统维护换不了微信头像怎么办 系统通知栏不显示qq图标怎么办 快递号码写错了而且发货了怎么办 包裹遗忘在郑州东站安检口了怎么办 锁书包的锁头钥匙全掉了怎么办 平板电脑恢复出厂设置变英语怎么办 给国外银行汇款账号写错账号怎么办 顺丰快递暴力运输产品坏了怎么办 亚航订机票名字少写一个字母怎么办 如果淘宝付款七天内不发货怎么办 浪琴手表调了一下日期不走了怎么办 收件人号码写错快递柜已签收怎么办 医院名字写错了怎么办保险报销 电脑在使用中出现了英文字慕怎么办 下雨天了怎么办我好想你是什么歌 安卓手机不支持微信运动怎么办 装系统时无法跳过密匙怎么办 在msdn里下的系统没有网怎么办 w7电脑更新后系统没法激活怎么办 手机使用加速器后网速变卡怎么办 奥特曼ol分解了迪迦石像怎么办 左右棋牌游戏兑换总说系统护怎么办 四季海棠扦插以后黄叶卷叶怎么办 竹节海棠浇水多了叶子蔫了怎么办 社保停缴了里面的钱怎么办 王者荣耀英雄释放技能有延迟怎么办 买的桑拿木板颜色太深了怎么办 万一填写了奔跑吧诈骗信息该怎么办 深圳限行时段堵在路上怎么办 开车堵在路上到了限行时间怎么办 兄妹之间都不想照顾母亲我该怎么办 小孩扁体发炎睡觉呼吸声沉重怎么办 客所思pk3老驱动有杂音怎么办 手机打不开解压包密码怎么办 在香港专柜买东西柜员少给货怎么办 恶魔猎手第二神器任务没选择怎么办 电脑放久了开不了机怎么办 你在主持时说错话了怎么办 1、你在主持时说错话了怎么办? 领导让你替他参加重要会议怎么办