正则表达式

正则表达式

一、基础语法
字符匹配具体用法
.所有字符\\.表示
\转义符java中使用以下字符都要加上\
\d所有数字\\d
\D非数字 [^0-9]\\D
[0-9]所有数字 作用同\d
[a-z]所有的小写字母
[A-Z]所有大写字母
\s一个空格\\s
\w所有字母、数字、下划线,相当于 [a-zA-Z_0-9]\\w
\W非单词字符 [^\w]\\W
^表示开头注意:^[0-9][^0-9]的区别
$表示结尾
[\u4e00-\u9fa5]匹配汉字
表示匹配的字符出现0或1次
+表示匹配的字符出现一次或多次
*表示匹配的字符出现零次或多次
{n}表示匹配的字符出现 n次
{n,}表示匹配的字符出现至少n次
{n,m}表示匹配的字符出现 至少n次,至多n次
[ ]一个中括号代表一个字符
二、具体用法
1.匹配
 public void test1(){
      //使用场景:验证手机号:1. 长度11位  2.纯数字 3.第二位数字为[35789]
        String phone = "15902693094";
     	String regex = "[1][35789][0-9]{9}";//写法1
      	String regex1 = "[1][35789]\\d{9}";//写法2

        boolean flag = phone.matches(regex1);
        System.out.println(flag ? "格式正确" : "格式错误");
	
     //验证任意9位字符
        String regex2 = ".{9}";
        System.out.println("123abc789".matches(regex2));
	 //验证带.格式的字符
        String regex3 = "\\d{3}\\.\\d{3}";
        System.out.println("123.789".matches(regex3));
    }
2.切割
 public void test2(){
        String str1 = "张三.李四.王五";
        String[] arr1 = str1.split("\\.");//切割的时候正则符号都添加
        for(String temp : arr1){
            System.out.println(temp);
        }
    }
3.替换
public void test3(){
       //使用场景:垂直电商评论
        String discuss = "大家好,我家星幻摆台,买一送一,联系电话:18803697091";
        String newDiscuss = discuss.replaceAll("1[35789]\\d{9}", "15225869255");
        System.out.println(newDiscuss);

        //替换:去掉叠字
        String str = "aaabbbcdefgggghh哈哈哈哈";
        //规则:多个字符挨在一起,并且字符一样
        //使用(模块):形成一个组,组有组编号
        String regex = "(.)\\1+";
        String str2 = str.replaceAll(regex, "$1");
        System.out.println(str2);
    
    	String str = "我...我我...我...喜喜...喜....欢....欢欢....你";
        //1.使用替换:将"."替换成""
        str = str.replaceAll("\\.+", "");
        //2.去叠字
        str = str.replaceAll("(.)\\1+","$1");
        System.out.println(str);   
 }
三、使用场景

1.验证邮箱

/* 邮箱验证分析:428308399@qq.com	Crazy1191@163.com
     * 第一个模块:可以为数字,字母,下划线,长度3-12位
     * 第二个模块:要么为纯数字,要么为纯字母,长度2-6
     * 第三个模块:.com,可以出现的次数为1-3*/    
    public void test5(){
       String email = "abc123@163.com.cn";
		//分开写
       String regex1 = "\\w{3,12}@[a-zA-z]{2,6}(\\.[a-zA-Z]{2,3}){1,3}";//第二个模块纯字母
       String regex2 = "\\w{3,12}@\\d{2,6}(\\.[a-zA-Z]{2,3}){1,3}";//第二个模块纯数字     
       boolean falg1 = email.matches(regex1) || email.matches(regex2);
        //合并写
       String regex = "\\w{3,12}@([a-zA-z]{2,6}|\\d{2,6})(\\.[a-zA-Z]{2,3}){1,3}";
       boolean flag2 = email.matches(regex);
        System.out.println("flag2:" + flag2);
    }

2.校验身份证

public void test1() throws ParseException {
    /*思路分析:
        (1)、长度为18位
        (2)、前面17位必须为纯数字
        (3)、最后一位可以为X,也可以为数字
	*/
        String regex1 = "\\d{17}[0-9X]";
        String idCard = "42010620190910235X";
        boolean flag = idCard.matches(regex1);
        System.out.println(flag?"身份证号验证通过":"身份证号有误");
}

3.对IP地址归类

  public void test7(){        
    /* 思路分析:如何将IP地址排序归类
    * 对id地址归类:A、B、C、D A-D的区间范围在1-255之间
    * 102.254.38.12
    * 11.12.122.25
    * 123.123.45.12 */
        String strs = "102.254.38.12,11.12.122.25,123.123.45.12";
       //1.将每个ip地址中的位数添加两个0
        strs = strs.replaceAll("(\\d{1,3})","00$1");

        //2.将ip字符串中的每个模块变成3个数字
        strs = strs.replaceAll("0+(\\d{3})","$1");
        System.out.println("strs=" + strs);

        //3.将给定的字符串切割成数组
        String[] attr = strs.split("\\,");

        //4.创建一个TreeSet集合,存放字符串
        Set<String> ipSet = new TreeSet<>();
        for(String s :attr){
            ipSet.add(s);
        }
        System.out.println("ipSet=" + ipSet);
        //5.遍历TreeSet集合,将每次取到的字符串首先去除多余的0,然后在添加到List集合中去
        ArrayList<String> ipList = new ArrayList<>();
        for(String ip : ipSet){
            String temp = ip.replaceAll("0*(\\d{1,3})","$1");
            ipList.add(temp);
        }
        //6.遍历ArrayList集合,输出结果
        for(String t : ipList){
            System.out.println("t =" + t);
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值