黑马程序员——18Java正则表达式及应用


------------ android培训 java培训 、期待与您交流!------------
 
1,正则表达式:符合一定规则的表达式。
作用:用于专门操作字符串。
特点:用于一些特定的符号来表示一些代码操作,这样就简化书写。
所以学习正则表达式,就是在学习一些特殊符号的使用。
好处:可以简化对字符串的复杂操作。
弊端:符号定义越多,正则越长,阅读性越差。
具体操作功能:
    1)匹配:String  matches。返回boolean型。用规则匹配整个字符串,只要有一处不符合规则,就匹配结束。
    2)切割:String split()。返回规则以外的String[]。
    3)替换:String replaceAll(regex,str)。返回替换后的String。
    4)获取:将字符串中的符合规则的子串取出。
匹配手机号:
            String tel = "16900001111";
      String telReg = "1[358]\\d{9}";
           System.out.println(tel.matches(telReg)); 
按叠词切割:
            String str = "
erkktyqqquizzzzzo";
            为了可以让规则的结果被重用可以将规则封装成一个组,用()完成,组的出现都有编号。从1开始,想要使用已有的组可以通过 \n(n就是组的编号)的形式来获取。
            String reg = "(.)\\1+";
            String[] arr = str.split(reg);  
      System.out.println(arr.length);
      for(String s : arr) {
System.out.println(s);
    
将重叠的字符替换成单个字母:zzzz->z 
            String str1 = "erkktyqqquizzzzzo";
            如果regex中有定义组,可以在第二参数中通过$符号获取正则表达式中的已有的组。 
    String str = replaceAll(str1,"(.)\\1+","$1"); 
            System.out.println(str); 
            
            2, 正则表达式的第四个功能。 获取:将字符串中的符合规则的子串取出。
        操作步骤:
                1)将正则表达式封装成对象。
                2)让正则对象和要操作的字符串相关联。
                3)关联后,获取正则匹配引擎。
                4)通过引擎对符合规则的子串进行操作,比如取出。
                import java.util.regex.*;
                class RegexDemo {
                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";
                 //将规则封装成对象。
                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());         //用于获取匹配后结果。
                System.out.println(m.start()+"...."+m.end());        //单词所在的位置。
                 }        
                 
}
                 
}

      3,  排序ip地址。
                192.68.1.254 
                102.49.23.13 
                10.10.10.10 
                2.2.2.2 
                8.109.90.30
        还按照字符串自然顺序,只要让它们每一段都是3位即可。
                1)按照每一段需要的最多的0进行补齐,那么每一段就会至少保证有3位。
                2)将每一段只保留3位。这样,所有的ip地址都是每一段3位。
        public static void ipSort() {
        String ip = "192.68.1.254 102.49.23.013 10.10.10.10 2.2.2.2 8.109.90.30";
        ip = ip.replaceAll("(\\d+)","00$1");        //每个字段的前面都补两个零
        System.out.println(ip);
        ip = ip.replaceAll("0*(\\d{3})","$1");        //每个字段只保留后3位
        System.out.println(ip);
        String[] arr = ip.split(" ");        //按空格切割字符串。
        TreeSet<String> ts = new TreeSet<String>();    //切割后的字符串存入有序的TreeSet集合。
        for(String s : arr) {
        ts.add(s);
         }
        for(String s : ts) {        //遍历集合打印ip地址,且去掉前面多余的0,与原串保持一致。
        System.out.println(s.replaceAll("0*(\\d+)","$1"));
         }
         
}

        4,匹配邮件。
                String mail = "abc12@sina.com";
String reg = "[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+)+";      / /较为精确的匹配。
reg = "\\w+@\\w+(\\.\\w+)+";      //相对不太精确的匹配。
//mail.indexOf("@")!=-1      // mail = "1@1.1"也可匹配成功。
System.out.println(mail.matches(reg));  

         5,网页爬虫(蜘蛛)。
import java.io.*;
import java.util.regex.*;
import java.net.*;
class RegexTest {
public static void main(String[] args) throws Exception {
getMails_1();
                getMails();
}
//抓取网页中的邮件地址。
public static void getMails_1()throws Exception {
//建立连接。
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 getMails()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());
}
}
}
}
 
------------ android培训 java培训 、期待与您交流!------------

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



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值