正则表达式(学生随便记得笔记)

引语:正则表达式多用于项目的账号密码验证,其作用可以极大降低代码量

1.正则表达式初体验
2.正则表达式使用方法(推荐API文档查阅不需背)
3.正则表达式一些案例
4.正则表达式在一些方法中的应用
5.正则表达式爬取信息(拓展,有点类似python爬虫)

1.正则表达式初体验

//案例:登录码判断是否符合规范
//如判断6到20位只包含数字的判断方法

//方法1:普通方法

public static void main(String[] args) {

      System.out.println(regex("31425423535"));//true


}
public static boolean regex(String qq){

        if(qq==null ||qq.length()<6||qq.length()>20) return false;

        for (int i = 0; i < qq.length(); i++) {

            char ch=qq.charAt(i);

            if (ch<'0'||ch>'9') return false;
        }

        return true;
}

//方法2:正则表达式
public static void main(String[] args) {
    
        System.out.println(NewRegex("3213123"));
        
    }
public static boolean NewRegex(String qq){

        return qq!=null&&qq.matches("\\d{6,20}");

}






 以上案例可以看出正则表达式可以大幅度简化代码量

2.正则表达式使用方法(推荐API查阅不用都背)

1.在javaAPI中搜索pattern则返回正则表达式各种使用方法(我使用的是jdk16和jdk17版本都是可以正常使用的)

 

2.以下是根据API写的一些内容,可以看懂API然后调用即可

 public static void main(String[] args) {
    

        

        /*[abc]	a, b, 或c(简单类)
          [^abc]	a除, b, 或c(否定)以外的任何字符
          [a-zA-Z]	a通过z 或A通过Z,包括(范围)
          [a-d[m-p]]	a通过d,或m通过p:([a-dm-p]联合)
          [a-z&&[def]]	d, e, or f(intersection)
          [a-z&&[^bc]]	a通过z,除了b和c:([ad-z]减法)
          [a-z&&[^m-p]]	a通过z,而不是m通过p:([a-lq-z]减法)
预定义的字符类*/

        System.out.println("a".matches("[abc]"));

        System.out.println("z".matches("[^abc]"));

        System.out.println("E".matches("[a-zA-Z]"));

        System.out.println("e".matches("[a-zA-Z]"));

        System.out.println("c".matches("[a-d[o-z]]"));

        System.out.println("f".matches("[a-d[o-z]]"));

        System.out.println("d".matches("[a-z&&[def]]"));

        System.out.println("a".matches("a-z&&[def]"));

        System.out.println("----------------------------");

        /* \d	一个数字:[0-9]
           \D	非数字:[^0-9]
           \h	水平空白字符: [ \t\xA0\u1680\u180e\u2000-\u200a\u202f\u205f\u3000]
           \H	非水平空白字符:[^\h]
           \s	空白字符:[ \t\n\x0B\f\r]
           \S	非空白字符:[^\s]
           \v	垂直空白字符:[\n\x0B\f\r\x85\u2028\u2029]
           \V	非垂直空白字符:[^\v]
           \w	一个字字符:[a-zA-Z_0-9]
           \W	非单词字符:[^\w]
\w	一个字字符:[a-zA-Z_0-9]*/

        //API中的\前需要再添加\,是由于java对\的敏感所以需要进行转义,
        //以上规则为小写为大写的反向表达
        System.out.println("1".matches("\\d"));

        System.out.println("d".matches("\\D"));

        System.out.println("f".matches("\\w"));

        System.out.println("@".matches("\\W"));


    }

3.利用正则表达式判断电话号码和邮箱号码是否正确

(小技巧:idea上ctrl+alt+t可以为选中内容进行死循环或者异常处理)


 public static void main(String[] args) {
        checkPhone();//电话号码判断
        

    }

    public static void checkPhone(){

        Scanner sc=new Scanner(System.in);
        System.out.println("输入手机号");
        while (true) {
            if (sc.next()!=null&&sc.next().matches("\\d{11}")){

                System.out.println("存在");//代表存在手机号
                break;
            }else {
                System.out.println("不存在");//代表不存在手机号
            }
        }

    }
public static void main(String[] args) {
        
        checkEmail();//电子邮箱判断

    }
ublic static void checkEmail(){
        //1090762149@qq.com
        Scanner sc=new Scanner(System.in);

        while (true) {
            System.out.println("请输入电子邮箱号");
            //1090762149@qq.com
            String email=sc.next();
            if(email!=null&&email.matches("\\w{5,15}@\\w{2}\\.\\w{3}")){/*由于每个人邮箱号不一样在此理解语法,不同情况再看API处理*/

                System.out.println("存在");
                break;
            }else {
                System.out.println("不存在");
            }
        }

    }

4.正则表达式在方法中的应用

方法名说明
public String relpaceAll(String s1,String s2)按照正则表达式匹配内容进行替换
public String[] split(String regex)按照正则表达式匹配的内容进行分割字符串,返回一个字符串数组

public static void main(String[] args) {


        //利用split进行乱数据分割;
        String str="黑Animal啊tiger呀Dog";

        String[]arr=str.split("\\w+");//分割单词结果出汉字

        String[]arrs=str.split("\\W+");

        for (int i = 0; i < arr.length; i++) {

            System.out.print(arr[i]);
        }
        for (int i = 0; i < arrs.length; i++) {
            System.out.println(arrs[i]);
        }


    }
public static void main(String[] args) {



        
        //利用replaceAll进行替换的方法

        String str="黑Animal啊tiger呀Dog";

        String newstr=str.replaceAll("\\w+"," ");//将括号左边的内容替换为括号右边内容

        System.out.println(newstr);


    }

5.正则表达式爬取网站字符串内容格式模板,直接套用,然后regex内容替换成自己需要的正则表达式内容即可

public static void main(String[] args) {
        
        //需求:从网上的内容中爬取自己所需要的内容
       
        String result="X";//X:X代表从互联网上爬取的一堆需要和不需要内容的随机混杂
 
        String regex="(a)|(b)|(c)|.....";//定义爬取规则和字符串形式
        //a,b,c代表填入需要内容的正则表达式,括号则是进行分组

        Pattern pattern=Pattern.compile(regex);//将爬取规则编译成字符串对象

        Matcher matcher=pattern.matcher(result);//得到一个内容匹配对象

        //开始寻找
        while (matcher.find()){
            String results=matcher.group();
            System.out.println(results);
        }

    }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值