第二天regex正则表达式

regex正则表达式

1.取单个字符的匹配
System.out.println("a".matches("[abc]"));//中括号里面的元素取一个true
System.out.println("1".matches("[a-z1-9]"));//中括号里所有a到z和1-9的元素取一个true
System.out.println("a".matches("[a-z]&&[a-c]"));//必须同时满足两边的中括号里的元素true
System.out.println("a".matches("[^cde]"));//必须不是括号里面的元素true
System.out.println("a".matches("\\d"));//代表的是数字0-9 false
System.out.println("a".matches("\\D"));//代表的是非(数字0-9) true
System.out.println("a".matches("\\s"));//小写s代表的是空白字符 false
System.out.println(" ".matches("\\S"));//大写S代表的是非空白字符  false
System.out.println("21".matches("\\w"));//代表的是0-9,a-z,A-Z和_中的一个  false
System.out.println(" ".matches("\\W"));//代表的是非0-9,a-z,A-Z和_中的一个  true
System.out.println("a".matches("."));//可以匹配任意字符
//1,以上带 [内容] 的规则都只能用于匹配单个字符。
//2,以上只适用于单个字符的匹配。用来匹配单个字符的。
//2,前四个是字符类,后面7个是预定义字符。

.

System.out.println("===========数量词=========");
// 2、数量词: ?   *   +   {n}   {n, }  {n, m}
System.out.println("123".matches("\\d?"));//?代表0次或者1次,意思就是数字0-9中取0次或者1次 false
System.out.println("dd".matches("\\D*"));//*代表0次或者多次,意思是非数字取0次或者多次  true
System.out.println("qcsa".matches("\\w+"));//+代表1次或者多次,意思就是0-9a-zA-Z_ 中取1次或者多次  true
System.out.println("第五步".matches("\\W{3}"));//{3}代表的是三次,意思就是不是0-9a-zA-Z_ 中取三次  true
System.out.println("去外地".matches("\\s{2,}"));//{2, }代表的是取>=2次,意思就是取空取两次   false
System.out.println("u啊好".matches("\\S{2,6}"));//{2,6}代表的是取>=2||<=6次 ,意思就是取这么多次非空值  true

System.out.println("=========其他常用=========");
//3,其他几个常用的符号:(?i)忽略大小写 、 或:| 、  分组:()
System.out.println("abc".matches("(?i)abc"));//(?i)是忽略大小写,但是两边字符不区分大小写的情况下一致才是true
System.out.println("不千岛湖11".matches("\\S{3,}|\\s"));//|就是或者的意思,满足一边即可,类似于或  true
System.out.println("黑马编程编程6666666".matches("黑马(编程)*(666)*"));//()代表的是()里面是一个组,这个组里要整体执行几次由后面加上符号决定

使用正则表达式校验QQ和电话

package com.itheima.d1_regex;

import java.util.Scanner;

// 目标:通过校验QQ号码格式带同学们初步认识正则表达式的使用步骤,并体会其便捷性。
//qq长度为6-20
public class Rd1 {
    public static void main(String[] args) {
        /*  System.out.println("请输入你的QQ:");
        String qq = new Scanner(System.in).next();

        boolean flag = checkqq(qq);
        if (flag){
            System.out.println("QQ号注册成功");
        }else {
            System.out.println("QQ注册失败");
        }*/

        System.out.println("请输入你的电话:");
        String phone = new Scanner(System.in).next();
        boolean flag2 = checkPhone(phone);
        if (flag2){
            System.out.println("电话注册成功");
        }else {
            System.out.println("电话注册失败");
        }
    }
    public static boolean checkqq(String qq){
        return qq!=null&&qq.matches("[1-9]\\d{5,19}");
    }

    // 18653559876
    // 020-4344245
    // 01043435355
    public  static boolean checkPhone(String phone){
        return phone!=null&&(phone.matches("1[3-9]\\d{9}")|phone.matches("0\\d{2}-?\\d{7,8}"));
    }
}

正则表达式爬虫爬取信息

package com.itheima.d1_regex;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Rd4 {
    public static void main(String[] args) {
        // 目标:了解使用正则表达式去文本中爬取想要的信息。
        String data = "来黑马程序员学习Java,\n" +
                "电话:18512516758,18512508907\n" +
                "或者联系邮箱: boniu@itcast.cn\n" +
                "座机电话:01036517895,010-98951256\n" +
                "邮箱:bozai@itcast.cn,\n" +
                "邮箱2:dlei0009@163.com,\n" +
                "热线电话:400-618-9090 ,400-618-4000,\n" +
                "4006184000,4006189090\n";
        String regex=("1[3-9]\\d{9}|(0[1-9][0-9]-?\\d{8,9})|(400-?\\d{3,4}-?\\d{4,5})|(\\w{5,11}@\\w{3,6}.?(\\w{2,3})){1,2}");
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(data);
        while (matcher.find()){
            System.out.println(matcher.group());
        }

    }
}
分组爬取信息
package com.itheima.d1_regex;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexDemo5 {
    public static void main(String[] args) {
        // 目标:了解使用正则表达式去文本中爬取想要的信息。(分组爬取, 了解)
        String data = "来黑马程序员学习Java,\n" +
                "电话:18512516758,18512508907\n" +
                "或者联系邮箱: boniu@itcast.cn\n" +
                "座机电话:01036517895,010-98951256\n" +
                "andy邮箱:bozai@itcast.cn,\n" +
                "邮箱2:dlei0009@163.com,\n" +
                "热线电话:400-618-9090 ,400-618-4000,\n" +
                "4006184000,4006189090\n";

        // 1、创建一个匹配规则对象,封装正则表达式(爬取的规则)
        String regex = "(\\w{2,30})@(\\w{2,20})(\\.\\w{2,10}){1,2}";
         Pattern pattern=Pattern.compile(regex);

        // 2、把内容和爬取规则建立联系,得到一个匹配器对象
        Matcher matcher = pattern.matcher(data);

        // 3、开始使用匹配器对象,开始爬取内容
        while (matcher.find()){
            System.out.println("  1"+matcher.group(1)); // 默认提取邮箱正则表达式第1个括号匹配的内容
            System.out.println("2"+matcher.group(2)); // 默认提取邮箱正则表达式第2个括号匹配的内容
            System.out.println("第三组:"+matcher.group(3)); // 默认提取邮箱正则表达式第2个括号匹配的内容
        }
    }
}
选择爬取用户信息
package com.itheima.d1_regex;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Re6 {
    public static void main(String[] args) {
        //需要爬取出所有进入系统的用户名
        String data = "欢迎张全蛋光临本系统!他删库并跑路欢迎李二狗子光临本系统!" +
                " 欢迎马六子光临本系统!它浏览了很多好看的照片!欢迎夏洛光临本系统!他在六点钟送出了一个嘉年华!" ;
        String regex="欢迎(.+)光临";//    贪婪匹配
        String regex2="欢迎(.+?)光临"; // 非贪婪匹配
        Pattern pattern = Pattern.compile(regex2);
        Matcher matcher = pattern.matcher(data);
        while (matcher.find()){
            System.out.println(matcher.group(1));
        }
    }
}

正则表达式对字符串的处理

package com.itheima.d1_regex;

public class Re7 {
    public static void main(String[] args) {
        // 1、public String replaceAll(String regex , String newStr):按照正则表达式匹配的内容进行替换
        // 需求1:请把 古力娜扎ai8888迪丽热巴999aa5566马尔扎哈fbbfsfs42425卡尔扎巴,中间的非中文字符替换成 “-”
        String s="古力娜扎ai8888迪丽热巴999aa5566马尔扎哈fbbfsfs42425卡尔扎巴";
        String s1 = s.replaceAll("\\w+", "-");
        System.out.println(s1);

        // 需求2(拓展,了解,可以不记):
        // 某语音系统,收到一个口吃的人说的“我我我喜欢编编编编编编编编编编编编程程程!”,需要优化成“我喜欢编程!”。
        String s2 = "我我我喜欢编编编编编编编编编编编编程程程";
        String s3 = s2.replaceAll("(.)\\1+", "$1");
        System.out.println(s3);
    }
}

目录

regex正则表达式

使用正则表达式校验QQ和电话

正则表达式爬虫爬取信息


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值