正则表达式 Regex

来源:互联网 发布:微信提现赚钱软件大全 编辑:程序博客网 时间:2024/06/05 01:53

校验

需求:判断是否为移动的号码,默认是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();    }}