黑马程序员——Java基础-15--正则表达式

来源:互联网 发布:数据规范化方法 编辑:程序博客网 时间:2024/05/21 06:27


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


1、正则表达式: 单纯技术,很多语言使用这个技术。
            就是用来操作 字符串数据的规则表达式。

规则:就是用一些符号组成,每个符号代表着特有的含义。
      其实这些符号相当于对应着底层一段代码。
      对外提供了符号是简化了操作。
 弊端: 必须先学习这些符号。符号多了,阅读性会较差。

2、正则表达式常见的操作:
1、匹配
  使用的是String类中的matchers方法

2.切割
  使用String类中的split方法。
3、替换
  使用的还是String中的replaceAll方法。
4、获取
    将匹配的规则的内容获取出来
    使用到正则表达式对象。Pattern
   
   使用步骤:
1、先将正则表达式编译成Pattern对象
    2、通过Pattern对象的matcher方法获取Matcher匹配器对象
  3、通过匹配器对象的方法,将正则规则作用到字符串上以便操作。

Pattern p = Pattern.compile("a*b");
  Matcher m = p.matcher("aaaaab");
  boolean b = m.matches();  

正则有字符串组成,正则表达式编译(功能)-正则对象

package cn.itcast.reg.p1.demo;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegDemo2 {
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        /*
         *  Pattern p = Pattern.compile("a*b");
            Matcher m = p.matcher("aaaaab");
            boolean b = m.matches();
         * 
         */
//      checkPhone();
//      splitDemo();
//      replaceAllDemo();
//      getString();
    }
    ********************************
            // 4. 演示获取
    public static void getString(){
        
        String str = "da jia zhu yi la ,ming tian fang jia la!";
        System.out.println(str);
        //1,定义规则。
        String reg = "\\b[a-z]{3}\\b";// 边界\\b
        //2,将规则编译成正则对象。
        Pattern p = Pattern.compile(reg);
        
        //3,通过正则对象获取匹配器对象,并和被操作的字符串相关联。
        Matcher m = p.matcher(str);
        
                // 要获取的结果不止一个,不能用matchers
        //4, 通过匹配器对象的方法对字符串进行规则的匹配。
//      boolean b = m.find();   //必须先找
//      System.out.println(b);
//      System.out.println(m.group());
        while(m.find()){
            System.out.println(m.start()+"..."+m.group()+"...."+m.end());           
        }   // 3...jia...6      
    }
****************************************
      //   3.  演示 替换
    public static void replaceAllDemo(){
        
        String str = "wer####tyuio***fgh";
        str = str.replaceAll("(.)\\1+", "@"); //    wer@tyuio@fgh
        str = str.replaceAll("(.)\\1+", "$1");
        //wer#tyuio*fgh   第二个参数使用正则,后一个参数可以通过$数字引用前一个参数中的组,
         
//      str = "asdfghj345678905678kl;ertyuio";//  过滤手机信息,
//      str = str.replaceAll("\\d{5,}", "***");
        
        str = "15812345678";
        str = str.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");// 158****5678
        System.out.println(str);
            
    }
    ******************************************
       // 2、 演示切割。。。。
    public static void splitDemo(){
        
        String str = "zhangsan.lisi.wangwu";
        String reg = "\\.";//  .是正则表达的特殊符号,
        
        str="23   19 -1 9 56";
        reg=" +";//一次或多次
        str = "wer####tyuio***fgh";
        reg = "(.)\\1+";  // 处理叠词-- 复用先封装,复用第一组
        //正则封装-名字是组(含编号默认从1开始),
        
        String[] arr = str.split(reg);
        for(String s : arr){
            System.out.println(s);
        }
        
    }   
****************************    
    /*
     *  1、匹配演示 对手机号码进行校验。
     */
    public static void checkPhone(){
        
        String tel = "18600001111";
        String reg = "1[358]\\d{9}";  
        
        boolean b = tel.matches(reg);
        System.out.println(tel+":"+b);            
    }
}

 
3、       // 演示 网络爬虫
         
// 是一段小程序,专门负责获取指定规则的数据。
需求: 获取指定文件的特定信息,比如邮箱地址
1 读取文件
2 获取文件中的每一行字符串
3 对该行字符串中的特定信息进行规则的匹配,将符合规则都获取出来,并进行存。

package cn.itcast.reg.p2.test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class NetBug {
    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        readMail();
    }
    public static void readMail() throws IOException {
        
        URL url = new URL("http://192.168.1.20:8080/index.jsp");// 爬服务器的邮箱
        
        URLConnection conn = url.openConnection();
        BufferedReader bufIn = new BufferedReader(new InputStreamReader(conn.getInputStream()));
                 
          //如果不需要操作消息头,,不需要获取openConnection(); url.openStream();
//      BufferedReader bufr  = new BufferedReader(new FileReader("c:\\mail.htm"));
        
        String line = null;
        
        //定义规则。mail规则。
        String reg = "[a-zA-Z0-9_-]+@\\w+(\\.\\w+)+";//外国的邮箱有-.@;域名支持-减号,不支持下划线。
        Pattern p = Pattern.compile(reg);
        while((line=bufIn.readLine())!=null){//匹配器通过流读的
            
            
            Matcher m = p.matcher(line);
            while(m.find()){
                System.out.println(m.group());// 不应该打印,存到集合里,在存到数据库
            }
        }
        
        bufIn.close();
        
    }
}


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


1、正则表达式: 单纯技术,很多语言使用这个技术。
            就是用来操作 字符串数据的规则表达式。

规则:就是用一些符号组成,每个符号代表着特有的含义。
      其实这些符号相当于对应着底层一段代码。
      对外提供了符号是简化了操作。
 弊端: 必须先学习这些符号。符号多了,阅读性会较差。

2、正则表达式常见的操作:
1、匹配
  使用的是String类中的matchers方法

2.切割
  使用String类中的split方法。
3、替换
  使用的还是String中的replaceAll方法。
4、获取
    将匹配的规则的内容获取出来
    使用到正则表达式对象。Pattern
   
   使用步骤:
1、先将正则表达式编译成Pattern对象
    2、通过Pattern对象的matcher方法获取Matcher匹配器对象
  3、通过匹配器对象的方法,将正则规则作用到字符串上以便操作。

Pattern p = Pattern.compile("a*b");
  Matcher m = p.matcher("aaaaab");
  boolean b = m.matches();  

正则有字符串组成,正则表达式编译(功能)-正则对象

package cn.itcast.reg.p1.demo;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegDemo2 {
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        /*
         *  Pattern p = Pattern.compile("a*b");
            Matcher m = p.matcher("aaaaab");
            boolean b = m.matches();
         * 
         */
//      checkPhone();
//      splitDemo();
//      replaceAllDemo();
//      getString();
    }
    ********************************
            // 4. 演示获取
    public static void getString(){
        
        String str = "da jia zhu yi la ,ming tian fang jia la!";
        System.out.println(str);
        //1,定义规则。
        String reg = "\\b[a-z]{3}\\b";// 边界\\b
        //2,将规则编译成正则对象。
        Pattern p = Pattern.compile(reg);
        
        //3,通过正则对象获取匹配器对象,并和被操作的字符串相关联。
        Matcher m = p.matcher(str);
        
                // 要获取的结果不止一个,不能用matchers
        //4, 通过匹配器对象的方法对字符串进行规则的匹配。
//      boolean b = m.find();   //必须先找
//      System.out.println(b);
//      System.out.println(m.group());
        while(m.find()){
            System.out.println(m.start()+"..."+m.group()+"...."+m.end());           
        }   // 3...jia...6      
    }
****************************************
      //   3.  演示 替换
    public static void replaceAllDemo(){
        
        String str = "wer####tyuio***fgh";
        str = str.replaceAll("(.)\\1+", "@"); //    wer@tyuio@fgh
        str = str.replaceAll("(.)\\1+", "$1");
        //wer#tyuio*fgh   第二个参数使用正则,后一个参数可以通过$数字引用前一个参数中的组,
         
//      str = "asdfghj345678905678kl;ertyuio";//  过滤手机信息,
//      str = str.replaceAll("\\d{5,}", "***");
        
        str = "15812345678";
        str = str.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");// 158****5678
        System.out.println(str);
            
    }
    ******************************************
       // 2、 演示切割。。。。
    public static void splitDemo(){
        
        String str = "zhangsan.lisi.wangwu";
        String reg = "\\.";//  .是正则表达的特殊符号,
        
        str="23   19 -1 9 56";
        reg=" +";//一次或多次
        str = "wer####tyuio***fgh";
        reg = "(.)\\1+";  // 处理叠词-- 复用先封装,复用第一组
        //正则封装-名字是组(含编号默认从1开始),
        
        String[] arr = str.split(reg);
        for(String s : arr){
            System.out.println(s);
        }
        
    }   
****************************    
    /*
     *  1、匹配演示 对手机号码进行校验。
     */
    public static void checkPhone(){
        
        String tel = "18600001111";
        String reg = "1[358]\\d{9}";  
        
        boolean b = tel.matches(reg);
        System.out.println(tel+":"+b);            
    }
}

 
3、       // 演示 网络爬虫
         
// 是一段小程序,专门负责获取指定规则的数据。
需求: 获取指定文件的特定信息,比如邮箱地址
1 读取文件
2 获取文件中的每一行字符串
3 对该行字符串中的特定信息进行规则的匹配,将符合规则都获取出来,并进行存。

package cn.itcast.reg.p2.test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class NetBug {
    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        readMail();
    }
    public static void readMail() throws IOException {
        
        URL url = new URL("http://192.168.1.20:8080/index.jsp");// 爬服务器的邮箱
        
        URLConnection conn = url.openConnection();
        BufferedReader bufIn = new BufferedReader(new InputStreamReader(conn.getInputStream()));
                 
          //如果不需要操作消息头,,不需要获取openConnection(); url.openStream();
//      BufferedReader bufr  = new BufferedReader(new FileReader("c:\\mail.htm"));
        
        String line = null;
        
        //定义规则。mail规则。
        String reg = "[a-zA-Z0-9_-]+@\\w+(\\.\\w+)+";//外国的邮箱有-.@;域名支持-减号,不支持下划线。
        Pattern p = Pattern.compile(reg);
        while((line=bufIn.readLine())!=null){//匹配器通过流读的
            
            
            Matcher m = p.matcher(line);
            while(m.find()){
                System.out.println(m.group());// 不应该打印,存到集合里,在存到数据库
            }
        }
        
        bufIn.close();
        
    }
}


---------------------- android培训 、 java培训 、 期待与您交流! ----------------------  
0 0
原创粉丝点击