黑马程序员——正则表达式

来源:互联网 发布:人工智能打败李世石 编辑:程序博客网 时间:2024/05/15 09:00

---------------------- <a href="http://edu.csdn.net/heima" target="blank">android培训</a>、<a href="http://edu.csdn.net/heima" target="blank">java培训</a>、期待与您交流! ----------------------

正则表达式:

符合一定规则的表达式
作用:用于专门操作字符串。
特点:用于一些特定的符号来表示一些代码操作,简化书写,所以学的就是这些符号
优点:可以简化对字符串的复杂操作
缺点:符号定义越多,正则越长,阅读性越差


具体的操作功能:
1、匹配:String类中的 matches()方法,用规则匹配整个字符串,只要有一处不服就停止
               注意在正则表达式中“\”的使用注意转义,两个“\\”表示一个“\”
2、切割:String类中得 split()方法
           里面重要易忘的知识点:
             按照叠词完成切割。
            为了可以让规则的结果被重用,可以将规则封装成一个组,用()完成,组的出 
            现都有编号,从1开始,想要使用已有的组可以通过\n(n就是几组)的形式获取
               (.)\\1+  多个叠词的组
            组的个数,数左括号数(()(())) 4个组
3、替换:String replaceAll()
               注意一个:将叠词替换成一个字母:用“$1”  $是一个特殊字符


4、获取:
操作步骤:(实例一完成)
1、将正则表达式封装成对象 Pattern类
2、让正则对象和要操作的字符串相关联(p.matcher()方法)
3、关联后,获取正则匹配引擎 (Mather m=p.matcher())
4、通过引擎对符合规则的子串进行操作,比如获取(m.find()  m.group)
     m.find() 将规则作用到字符串上,并进行符合规则的子串查找
     m.group() 用于匹配后的结果输出
          所以二者要同时存在


以上四个功能的辨别使用方法
正则表达式的思路方法:(实例二)
1、如果只想知道该字符是否对错,直接用匹配
2、如果要要把一个字符串变成另一个字符串,替换
3、想要按照自定的方式将字符串变成多个字符串,切割。获取条件以外的内容
4、想要拿到符合要求的字符串,获取符合规则的字符串




正则附加网页爬虫部分(实例三)


实例一)*/

     public static void getDemo()
     {
          String str="ming tian jiu fang jia le ,tong xue men ";
          String reg="\\b[a-z]{3}\\b";

          //将规则封装成对象
          Pattern p=Pattern.compile(reg);
          //让正则对象和要作用的字符串相关联。获取匹配器对象
          Matcher m=p.matcher(str);

          System.out.println(m.matches());
          //String类中得matches()方法就是通过Pattern和Matcher对象实现的
          //只是在string 类中对其进行了封装

          while (m.find())//将规则作用到字符串上,并进行符合规则的子串查找
          {
               System.out.println(m.group());//用于匹配后的结果输出
          }
     }
(实例二)
需求:1、将下列字符串转换成:我要学习编程
      2、将ip地址进行地址段顺序排序
         192.168.1.254
          102.49.23.013
          10.10.10.10
          2.2.2.2
          8.109.90.30

      3、对邮件地址进行校验(思路就是匹配)

    
public static void test1()
     {
          String str="我我....我.要要要...学..习习习习习...编编..编.程...程程";
          str=str.replaceAll("\\.+","");  //   首先要将.替换成空格
          str=str.replaceAll("(.)\\1+","$1");//再将重复的组替换成一个
          System.out.println(str);
     }

     public static void test2()
     {
          String str="192.168.1.254 102.49.23.013 10.10.10.10 2.2.2.2 8.109.90.30";
          //首先要对其位数进行处理,都处理成3位,就得先全部添加2个0,这样才能保证至少有三位
          str=str.replaceAll("(\\d+)","00$1");
          //继续处理数字位数,都是三位数
          str=str.replaceAll("0*(\\d{3})","$1");//0*(\\d{3} 0出现0次或者多次 要有三位数字
          System.out.println(str);

          String[] arr=str.split(" ");
          TreeSet<String> ts=new TreeSet<String>();
          for (String s:arr )
          {
               ts.add(s);
          }
          for (String s:ts )
          {
               System.out.println(s.replaceAll("0*(\\d+)","$1"));
          }
     }
     public static void test3()
     {
          String mail="abc1244@sina.com";
          String reg="[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+)+";//精确的匹配
        //有个不精确匹配  \\w+@w+(\\.\\w+)+
          System.out.println(mail.matches(reg));
     }


(实例三)
public static void getmail_1()throws Exception
     {
          //获取网页中的邮箱地址
          URL url=new URL("http://localhost:8080/myweb/mail.html");
          URLConnection conn=url.openConnection();

          BufferedReader bufIn=new BufferedReader(new InputStreamReader(conn.getInputStream()));
          String line=null;
          String mailreg="\\w+@\\w+(\\.\\w+)+";
          Pattern p=Pattern.compile(mailreg);
          while ((line=bufIn.readLine())!=null)
          {
               Matcher m=p.matcher(line);
               while (m.find())
               {
                    System.out.println(m.group());
               }
              
          }
    
     }
     public static void getmail() throws Exception
     {
          //获取文档中邮箱地址 用到正则匹配功能
          BufferedReader bufr=new BufferedReader(new FileReader("mail.txt"));
          String line=null;

          String mailreg="\\w+@\\w+(\\.\\w+)+";
          Pattern p=Pattern.compile(mailreg);
          while ((line=bufr.readLine())!=null)
          {
              
               Matcher m=p.matcher(line);
               while (m.find())
               {
                    System.out.println(m.group());
               }
              
          }
     }



---------------------- <a href="http://edu.csdn.net/heima" target="blank">android培训</a>、<a href="http://edu.csdn.net/heima" target="blank">java培训</a>、期待与您交流! ----------------------

详细请查看:<a href="http://edu.csdn.net/heima" target="blank">http://edu.csdn.net/heima</a>





原创粉丝点击