正则表达式 Regex

校验

需求:判断是否为移动的号码,默认是13 15 18开头的11位号码
RegexDemo.java

class RegexDemo{
    public static void main(String[] args) {
        String num="13345678901";
        String regexNum="1[358]\\d{9}";
        System.out.println(num.matches(regexNum));

    }
}

“\d”表示数字 “{}”表示个数 “[]”表示范围

匹配

找出三个字母的单词
RegexDemo2.java

import java.util.regex.*;
class RegexDemo2{
    public static void main(String[] args) {
        String s="ning hao jin tian bu jia ban";
        //"\b"单词边界
        String reg="\\b[a-z]{3}\\b";
        Pattern p=Pattern.compile(reg);

        Matcher m=p.matcher(s);
        // System.out.println(m.matches());
        while(m.find()){
            System.out.println(m.group());
            System.out.println(m.start()+"..."+m.end());
        }

    }
}

“\b”这是一个字符,表示单词边界,前面需要”/”提示接下来的字符是需要被转义的,即第二个”/”是要被转义的。

替换

ReplaceDemo.java

class ReplaceDemo{
    public static void main(String[] args) {
        replace("niisjjolkkksl","(.)\\1+","$1");
        replace("我我我我我要要要要要学学学学学编编编编程程程程程","(.)\\1+","$1");
    }

    public static void replace(String str,String olds,String news){
        String newstr=str.replaceAll(olds,news);
        System.out.println(newstr);
    }
}

“.”表示所有单个字符 当想表示”.”的时候是用”\.”
“\1”表示第一个()部分
“$1”表示“前面使用过的”第一个()部分

分割

SplitDemo.java

class SplitDemo{
    public static void main(String[] args) {
        // splitString("zhangsan.lisi.wangwu","\\.");//分割普通字符或转义字符,有些字符本来就是转义字符 需要加上一个/表示之后的字符不要被转义。
        // splitString("liuhua  sdf final   dsg"," +");//不同的空格数量
        splitString("hsdffiosdnnsdoooof","(.)\\1+");//叠词分割 ()表示组  1表示第几组


    }
    public static void splitString(String str,String reg){
        String[] strs=str.split(reg);
        System.out.println(strs.length);
        for(String s:strs){
            System.out.println(s);
        }
    }
}

几个联系

import java.util.regex.*;
import java.util.*;
class RegexTest{
    public static void main(String[] args) {
        test_3();
    }
    //去口吃
    public static void test_1(){
        String str="我我...我我...我要..要要...要要....学学学....学学..编编编...编程...程.程程...程";
        String regex="";
        // 用两次替换
        String newStr1=str.replaceAll("\\.+","");
        String newStr2=newStr1.replaceAll("(.)\\1+","$1");
        System.out.println(newStr1);
        System.out.println(newStr2);
    }
    //ip地址排序
    public static void test_2(){
        String str="192.68.1.254 102.19.23.13 10.10.10.10 2.2.2.2 8.109.90.30";
        //补0
        String str1=str.replaceAll("(\\d+)","00$1");
        //去多余的0
        String str2=str1.replaceAll("0*(\\d{3})","$1");
        System.out.println(str2);
        String[] strs=str2.split(" +");
        Arrays.sort(strs);
        for(String s:strs){
            System.out.println(s.replaceAll("0*(\\d)","$1"));
        }
    }
    //校验邮箱
    public static void test_3(){
        String email="sssa2@asiainfo.com.cn";
        boolean b=email.matches("[0-9a-zA-Z_]{4,12}@[0-9a-zA-Z]+(\\.[a-zA-Z]+){1,3}");
        System.out.println(b);
    }
}

利用正则表达式网络爬虫

找出一个网页中所有的邮箱

import java.net.*;
import java.util.regex.*;
import java.io.*;
class WebCrawler{
    public static void main(String[] args) throws Exception{
        URL url=new URL("http://blog.csdn.net/kingszelda/article/details/41170835/");
        URLConnection conn=url.openConnection();
        BufferedReader br=new BufferedReader(new InputStreamReader(conn.getInputStream(),"utf-8"));
        BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("hello.html"),"utf-8"));
        String reg="\\w+@\\w+\\.\\w+";
        Pattern p=Pattern.compile(reg);
        Matcher m;
        String line=null;
        while((line=br.readLine())!=null){
            m=p.matcher(line);
            while(m.find()){
                System.out.println(m.group());
            }
            bw.write(line);
            bw.newLine();
        }

        bw.flush();
        bw.close();
        br.close();
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值