正则表达式

正则表达式:符合一定规则的表达式。

           作用:用于专门操作字符串。

           特点:用于一些特定的符号来表示一些代码操作,简化书写

例如,对QQ号码进行校验,要求:5~15(0不能开头,只能是数字)

import java.util.Scanner;

public class RegexDemo_1129 {
    public static void main(String[] args){
        System.out.println("请输入QQ号码:");
        Scanner sc = new Scanner(System.in);
        String qq = sc.nextLine();
        checkQQ_1(qq);
    }
    public static void checkQQ_1(String str){
        String regex="[1-9][0-9]{4,14}";
        boolean flag=str.matches(regex);
        if(flag)
            System.out.println("qq:"+str);
        else
            System.out.println("不合法");
    }
    public static void checkQQ(String str){

        int len=str.length();
        if(len>=5&&len<=15){//超出int范围
            if(!str.startsWith("0")){
                try {
                    long l=Long.parseLong(str);
                    System.out.println("qq:"+l);
                }catch (NumberFormatException e){
                    System.out.println("出现非法字符");
                }

                /*
                char[] chs = str.toCharArray();
                boolean flag=true;
                for(int i=0;i<chs.length;i++){
                    if(!(chs[i]>='0'&&chs[i]<='9')) {
                        flag = false;
                        break;
                    }
                }
                if(flag){
                    System.out.println("qq:"+str);
                }else {
                    System.out.println("出现非法字符");
                }
                */
            }else {
                System.out.println("不可以0开头");
            }
        }else {
            System.out.println("长度错误");
        }
    }

}

具体操作功能:

1,匹配:String matches方法

需求:手机号段只有13xxx 15xxx 18xxx

public static void checkTel(String str){
        String telReg = "1[358]\\d{9}";
        System.out.println(str.matches(telReg));
    }

2、切割  String split();

           String reg="+"  //按照多个空格进行切割

例如:String str="c:\\abc\\a.txt";  reg="\\\\"  c: abc a.txt

           String str="erkktyqquio"; //叠词,为了可以让规则的结果被重用,可以让规则封装成一个组,用()完成,组的出现都有编号,从1开始,  reg="(.)\\1"  reg="(.)\\1+"(多个

弊端:符号定义越多,正则越长,阅读性越差。

3、替换 

例如:将字符串的数字替换成#, replaceAll(str,"\\d{5,}","#")

           将叠词替换成&, replaceAll(str,"(.)\\1+","&")

           将重叠的字符替换成单个字母  replaceAll(str,"(.)\\1+","$1")

4、获取:将字符串中的符合规则的子串取出。

操作步骤:

1,将正则表达式封装成对象

2,让正则对象和要操作的字符串相关联

3,关联后,获取正则表达式引擎。

4,通过引擎对符合规则的子串进行操作,比如取出。

练习1:

String str="我我...我我...我要..要要...学学学..编编编..程程";
        //
        1.先去.
        2.重复变单个
         //
        str=str.replaceAll("\\.+","");
        System.out.println(str);
        str=str.replaceAll("(.)\\1+","$1");
        System.out.println(str);

练习2:IP地址排序

public static void ipSort(){
        String ip="192.68.1.254 102.46.23.45 2.2.2.2";
        ip=ip.replaceAll("(\\d+)","00$1");
        System.out.println(ip);

        ip=ip.replaceAll("0*(\\d{3})","$1");
        System.out.println(ip);

        String[] str=ip.split(" ");
        Arrays.sort(str);
        for(String s:str){
            System.out.println(s.replaceAll("0*(\\d+)","$1"));
        }

练习3:对邮件地址进行校验


    public static void checkMail(String str){
        String reg="[a-zA-Z0-9_]{6,12}@[a-zA-Z0-9]+(\\.[a-zA-Z]+){1,3}";
        System.out.println(str.matches(reg));
    }

练习:获取邮件地址

1)网页爬虫:

public static void getMail_2()throws Exception{
        URL url = new URL("");
        URLConnection con = url.openConnection();
        BufferedReader bufin = new BufferedReader(new InputStreamReader(con.getInputStream()));
        String line=null;
        String mailReg="";
        Pattern p = Pattern.compile(mailReg);
        while ((line=bufin.readLine())!=null){
            Matcher m = p.matcher(line);
            while (m.find()){
                System.out.println(m.group());
            }

        }
    }

2)文档爬虫:

    “获取”指定文档中邮件地址,
    使用获取功能Pattern Matcher



     
    public static void getMails()throws Exception {
        BufferedReader bufr = new BufferedReader(new FileReader("mail.txt"));
        String line=null;
        String mailreg="[a-zA-Z0-9_]{6,12}@[a-zA-Z0-9]+(\\.[a-zA-Z]+){1,3}";
        Pattern p =Pattern.compile(mailreg);
        while ((line=bufr.readLine())!=null){
            Matcher m = p.matcher(line);
            while (m.find()){
                System.out.println(m.group());
            }

        }
    }

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值