黑马程序员-Java语言基础–正则表达式 第25天

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


正则表达式

正则表达式:符合一定规则的表达式。

      作用: 用于专门操作字符串

      特点:用一些特定的符号来表示一些代码操作,这样就简化书写。所以学习正则表达式就是在学习一些特殊符号的使用。

      好处:可以简化对字符串的复杂操作

      弊端:符号定义越多,正则越长,阅读性越差。

对结果进行判断,定义标记。

具体操作功能:

1、匹配:String类中的matches方法。

用规则匹配整个字符串,只要有一处不符合规则,就匹配结束。返回false。

2、切割:Stringsplit()                                                                            

3、替换:String replaceAll();

4、获取:将字符串中符合规则的子串取出(获取指定规则的字符串)  

操作步骤:

      1、现将正在表达式封装成对象

      2、让正则表达式和要操作的字符串相关联。

      3、关联后,获取正则匹配引擎。

      4、通过引擎对符合规则的子串进行操作。比如取出。

 

      为了可以让规则的结果被重用,可以将规则封装成一个组,用()表示。

      组的出现都有编号,从1开始,想要使用已有的组可以通过 \n(n就是组的编号)的形式来获取。

replaceAllDemo(str1,"(.)\\1+","$1");//通过$符号获取前面一个组。前提是有一个组。                                 

 

4、获取:

      用到的包是java.util.regex包里面只有两个类 :pattern、matcher和一个异常(runtimeexception)类。

   发现:Pattern类没有构造函数(不让new对象)。那么肯定提供方法,而且是静态的,返回的是本类对象。

static Pattern  compile(String regex)

       //将正则封装成对象。

           Pattern p = Pattern.compile(reg);//注意大小写。

           //让正则对象和要作用的字符串相关联。获取匹配器对象

           Matcher m = p.matcher(str);

       //获取。先找find。再通过group获取。

       while (m.find())

           {

                 System.out.println(m.group());

           }

典型的调用顺序是:

 Pattern p = Pattern.compile(reg);

 Matcher m = p.matcher(str);

 boolean b = m.matches();

其中:Pattern将正则表达字符串编译封装,然后调用matcher函数返回一个存放了结果的Matcher匹配器,Matcher里面有很多的方法,根据要求的不同可以返回不同的结果,而matches是全部匹配,返回布尔值。

import java.util.regex.*;

 

class RegexDemo2

{

      public static void main(String[] args)

      {

           getDemo();

      }

 

      public static void getDemo()

      {

           String str = "ming tian jiu yao fang jia le , da jia.";

 

           String reg = "\\b[a-z]{4}\\b";//  '\b'是边界判断

 

           //将正则封装成对象。

           Pattern p = Pattern.compile(reg);//注意大小写。

 

           //让正在对象和要作用的字符串相关联。获取匹配器对象。

           Matcher m = p.matcher(str);//正则对象和字符串相关联。

 

           //其实String类中的matches方法就是用Pattern和Matcher对象完成的。                          

           //只不过被String的方法封装后,用来较为简单,但功能简单。

           //System.out.println(m.matches());

 

           //boolean b = m.find();//将规则作用到字符串上,并进行符合规则的子串查找。

           //System.out.println(b);

           //System.out.println(m.group());//用于获取匹配后的结果。

 

           while (m.find())

           {

                 System.out.println(m.group());

                 System.out.println(m.start()+"..."+m.end());

           }

      }         

}

 

X*   没有或多次

 

到底用四种功能中的哪一个呢?或者哪几个?思考方式。[day25-06]

思考方式:

      1、如果只想知道该字符串是对是错,可以使用匹配。

      2、想要将已有的字符串变成另一个字符串,可以替换。

      3、想要按照指定的方式,将字符串变成多个字符串,切割。获取规则意外的子串。

      4、想要拿到符合需求的字符串子串,获取。获取符合规则的子串。

 

常见的QQ号码校验程序:

public static void checkQQ()

      {

           String qq = "12345678";

       //步骤分析:

           //第一位:只能是1-9;

           //第二位: 只要是数字就行;

           //第三位:出现的次数是4-14次;大括号中间为逗号                                                         

           //String regex = "[1-9][0-9]{4,14}";

           String regex = "[1-9]\\d{4,14}";

 

           boolean flag = qq.matches(regex);

           if(flag)

                 System.out.println(qq+"....is ok");

           else

                 System.out.println(qq+"....不合法");

      }

 

切割中用点(.)切割时:使用(\\.)去切割

按多个空格( +)切割时:使用(_+)去切割

 

/*

      匹配手机号:

      手机号段都只有13xxx,15xxx,18xxx

      */

 

      public static void checkTel()

      {

           String tel = "1399999999";          

           String telReg = "1[358]\\d{9}";

           System.out.println(tel.matches(telReg));                                                                     

      }

 

常用的去叠词替换:

       replaceAllDemo(str1,"(.)\\1+","&");//ert&ui&pu&bn

           //相当于去除重复的。ertyuiopuvbn。前一个规则中的第一个组。

           replaceAllDemo(str1,"(.)\\1+","$1");//通过$符号获取前面一个组。前提是有一个组。       

 

单词边界判断:‘\b’à "\\b[a-z]{4}\\b"

 

邮箱地址校验:

/*

      需求:对邮件地址进行校验。

 

      */

      public static void checkMail()

      {

           String mail = "abc12@sina.com";

 

           String reg = "[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+)+";//或者{1,3}一次到三次//较为精确的匹配。

           reg= "\\w+@\\w+(\\.\\w+)+";//相对不太精确的匹配

 

           //mail.indexOf("@")!=-1;

                

           System.out.println(mail.matches(reg));

      }

 


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

详细请查看:http://edu.csdn.net/heima



 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值