Java正则表达式

来源:互联网 发布:推背图的骗局 知乎 编辑:程序博客网 时间:2024/06/07 03:55

正则表达式:符合一定规则的表达式
作用:用于专门操作字符串
特点:用于一些特定的符号来表示一些代码操作,这样就简化书写
好处:可以简化对字符串的复杂操作
所以学习正则表达式,就是在学习一些特殊符号的使用

1.正则表达式的匹配、切割、替换操作

public class RegexDemo {    //匹配,手机号段只有13xx,15xx,18xx    public static void checkTel(){        String tel="13899882736";        String reg="1[358]\\d{9}";        System.out.println(tel.matches(reg));    }    //切割    public static void spliteDemo(String str,String reg){        String[] arr=str.split(reg);        for(String s:arr){            System.out.println(s);        }    }    //替换    public static void replaceAllDemo(String str,String reg,String newStr){        str=str.replaceAll(reg, newStr);        System.out.println(str);    }    public static void main(String[] args) {//      checkTel();        /*        spliteDemo("zhangsan  lisi  wangwu"," +");//按照多个空格来切割        spliteDemo("zhangsan.lisi.wangwu","\\.");//按照.来切割        spliteDemo("c:\\abc\\a.txt","\\\\");        //为了可以让规则的结果被重用,可以将规则封装成一个组,用()完成。组的出现都有编号        //从1开始。想要使用已有的组可以通过\n(n就是组的编号)的形式来获取        spliteDemo("erkktyqquizzzzzo","(.)\\1+");//按照叠词完成切割        */        /*String str="wer123122tys213112123odasd";//将字符串中的数字替换成#号        replaceAllDemo(str, "\\d{5,}", "#");        String str1="erkktyqquizzzzzo";//将重叠的字符替换成单个字母。zzzzz->z        replaceAllDemo(str1, "(.)\\1+", "$1");*/       }}

2.正则表达式的第四个功能

获取:将字符串中的符合规则的子串取出
操作步骤:

  • 将正则表达式封装成对象
  • 将正则对象和要操作的字符串相关联
  • 关联后,获取正则匹配引擎
  • 通过引擎对符合规则的子串进行操作,比如取出
public class RegexDemo2 {    public static void main(String[] args) {        getDemo();    }    public static void getDemo(){        String str="ming tian jiu yao fang jia le ,da jia. ";//      str="123456";//      String reg="[1-9]\\d{4,14}";        String reg="\\b[a-z]{3}\\b";        //将规则封装成对象        Pattern p=Pattern.compile(reg);        //让正则对象和要作用的字符串相关联,获取匹配器对象        Matcher m=p.matcher(str);//      System.out.println(m.matches());//true,其实String类中的matchers方法。用的就是Pattern和Matchers对象来完成的        while(m.find()){//将规则作用到字符串上,并进行符合规则的子串查找            System.out.println(m.group());//用于获取匹配后的结果            System.out.println(m.start()+"..."+m.end());        }    }}

3.正则表达式小练习

public class RegexTest {    public static void main(String[] args) {//      test_1();//      ipSort();        checkMail();    }    /**     * 需求:将下列字符串转成:我要学编程     * 到底用四种功能中的哪一种呢?或者哪几个呢?     * 1.如果只想知道该字符是否对错,使用匹配     * 2.想要将已有的字符串变成另一个字符串,替换     * 3.想要按照自定的方式将字符串变成多个字符串。切割,获取规则以外的子串     * 4.想要拿到符合需求的字符串子串,获取,获取符合规则的子串     */    public static void test_1(){        String str="我我...我我...我要...要要...要要...学学学....学学编编编...编程..程.程程...程...程";        //先将.去掉        str=str.replaceAll("\\.+", "");        System.out.println(str);        str=str.replaceAll("(.)\\1+", "$1");        System.out.println(str);    }    //ip地址进行排序    public static void ipSort(){        String ip="192.168.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");        System.out.println(ip);        String[] arr=ip.split(" +");        TreeSet<String> ts=new TreeSet<>();        for(String s:arr){            ts.add(s);        }        for(String s:ts){            System.out.println(s.replaceAll("0*(\\d+)", "$1"));        }    }    //对邮件地址进行校验    public static void checkMail(){        String mail="abcd12@sina.com";        String reg="[a-zA-Z0-9_]+@[a-zA_Z0-9]+(\\.[a-zA_Z]+){1,3}";//较为精确的匹配        reg="\\w+@\\w+(\\.\\w+)+";//相对不太精确的匹配        System.out.println(mail.matches(reg));    }}
0 0