Java 正则表达式

来源:互联网 发布:mac windows 文件系统 编辑:程序博客网 时间:2024/06/07 19:26

前言:跟着偶操作,一篇文章带你练熟正则表达式。
原文出处:http://blog.csdn.net/u014158743/article/details/52939607

这里有一篇讲语法的,可以看看,更值得一提的是不得不说这个网站很清晰,很适合入门。
http://www.runoob.com/java/java-regular-expressions.html

Demo1.java

public class Demo1 {    /**     * 正则表达式:专门针对字符串的     */    public static void main(String[] args) {        String qq = "32398485794";        //boolean boo = checkQQ(qq);        //System.out.println(boo);        String regex = "[1-9]\\d{4,14}";//验证 qq号的正则表达式        boolean  b = qq.matches(regex);        System.out.println(b);    }    //判断qq号是否正确,5--15,不能以0开头,必须全是数字    public static  boolean checkQQ(String qq) {        int len = qq.length();        if(len>=5 && len<=15) {            if(!qq.startsWith("0")) {                try {                      long num = Long.parseLong(qq);                      return true;                }catch(NumberFormatException e) {                    e.printStackTrace();                }            } else                System.out.println(qq+"号以0开头了");        } else            System.out.println(qq+"号的长度不合法");        return false;    }}

Demo2.java

public class Demo2 {    /**     * @param args     */    public static void main(String[] args) {        String ss = "booooooook";        String regex = "bo+k";        boolean boo = ss.matches(regex);        System.out.println(boo);    }}

Demo3.java

public class Demo3 {    /**     * 正则表达式针对字符串的常用操作:      * 1:匹配: 实际用的是String类中的 boolean matches(String regex)方法     * 2:切割: 实际用的是 String类中的 Sring[] split(String regex)      * 3:替换: 实际使用的是 String replaceAll(String regex, String replacement)      * 4:获取:     *  Pattern:把字符串形式的正则表达式编译成Pattern类型的对象     *  Matcher:从指定的字符串中查找符合正则规则的内容     */    public static void main(String[] args) {        // piPei();        // qieGe();        // tiHuan();        huoQu();    }    // 获取    public static void huoQu() {        String ss = "zhu yi la,ming tian fang jia.";        String regex = "[a-z]{4}";        // 把字符串形式的正则表达式编译成Pattern类型的对象        // Pattern类型的对象不具备从字符串中获取内容的功能        Pattern pattern = Pattern.compile(regex);        // Matcher具备从字符串中获取内容的功能        // 从字符串ss中或取符合pattern规则的内容        Matcher matcher = pattern.matcher(ss);        while (matcher.find()) {            System.out.println(matcher.group());        }    }    // 替换    public static void tiHuan() {        // String ss = "lisi****zhangsan&&&&&wangwu##########liunengaa";        // String regex = "(.)\\1+";        // ss = ss.replaceAll(regex, "$1");        // String ss =        // "woieurowie2983748934789lskdjflsk039485094lksdjflk338949";        // String regex = "\\d{8,}";        // ss = ss.replaceAll(regex, "****");        String ss = "13545127892";        String regex = "(\\d{3})\\d{4}(\\d{4})";        ss = ss.replaceAll(regex, "$1****$2");        System.out.println(ss);    }    public static void qieGe() {        // String ss = "lisi.zhangsan.wangwu.liuneng";        // String regex = "\\.";        // String ss = "lisi   zhangsan wangwu      liuneng";        // String regex = " +";        String ss = "lisi****zhangsan&&&&&wangwu##########liunengaa";        String regex = "(.)\\1+";        String[] arr = ss.split(regex);        for (String str : arr) {            System.out.println(str);        }    }    // 匹配    public static void piPei() {        String tel = "18623568912";        String regex = "1[3578]\\d{9}";        boolean boo = tel.matches(regex);        System.out.println(boo);    }}

Demo4.java

public class Demo4 {    /**     *      * 练习1:我我..我我..我.我要...要要...要要...要学学....学学学...编编...编编..编程...程程...程程..程.程     * 要求,转成:我要学编程。     */    public static void main(String[] args) {        String ss = "我我..我我..我.我要...要要...要要...要学学....学学学...编编...编编..编程...程程...程程..程.程";        ss = ss.replaceAll("\\.+", "");        System.out.println(ss);        ss = ss.replaceAll("(.)\\1+", "$1");        System.out.println(ss);    }}

Demo5.java

public class Demo5 {    /**     * 练习2:对ip地址按照数值顺序排序。     * 192.168.001.200  010.010.010.010  004.004.004.004 127.000.000.001     */    public static void main(String[] args) {        String ss = "192.168.1.200  10.10.10.10  4.4.4.4 127.0.0.1";        //在每个地址前补两个0        ss = ss.replaceAll("(\\d{1,3})", "00$1");        System.out.println(ss);        //每个地址值只保留后三位        ss = ss.replaceAll("0*(\\d{3})", "$1");        System.out.println(ss);        String[] arr = ss.split(" +");        Arrays.sort(arr);        for(String str:arr) {            System.out.println(str.replaceAll("0*(\\d{1,3})", "$1"));        }    }}

Demo6.java

public class Demo6 {    /**     * 练习3:对邮件地址进行匹配。     */    public static void main(String[] args) {        String email = "abc@sina.com.cn";        //String regex = "[a-zA-Z_0-9]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+){1,2}";        String regex = "\\w+@\\w+(\\.\\w+)+";        boolean boo = email.matches(regex);        System.out.println(boo);    }}

Demo7.java

public class Demo7 {    /**     * 练习4:实现网页爬虫     */    public static void main(String[] args) throws IOException {        //getEmails();        getEmail();    }    //从网络上的html文件中获取邮箱    public static void getEmail() throws IOException {        String path = "http://localhost:8080/myweb/mail.html";        URL url = new URL(path);        URLConnection conn = url.openConnection();        InputStream in = conn.getInputStream();        BufferedReader br = new BufferedReader(new InputStreamReader(in));        String regex = "\\w+@\\w+(\\.\\w+)+";        Pattern pattern = Pattern.compile(regex);        String line = null;        while((line = br.readLine())!=null) {            Matcher m = pattern.matcher(line);            while(m.find()) {                System.out.println(m.group());            }        }    }    //从本地文件中获取邮箱    public static void getEmails() throws IOException {        BufferedReader br = new BufferedReader(new FileReader("fiile\\mail.html"));        String regex = "\\w+@\\w+(\\.\\w+)+";        Pattern pattern = Pattern.compile(regex);        String line = null;        while((line =br.readLine())!=null) {            Matcher m = pattern.matcher(line);            while(m.find()) {                System.out.println(m.group());            }        }    }}
1 0