带你从零学大数据系列之Java篇---第十四章 正则表达式_java 大数据量字符串匹配算法

public class Regex1 {

public static void main(String[] args) {
    System.out.println(checkWithRegex("123456"));            // true
    System.out.println(checkWithRegex("1234"));              // false
    System.out.println(checkWithRegex("1234567890987"));     // false
    System.out.println(checkWithRegex("123.456"));           // false
    System.out.println(checkWithRegex("abcdefg"));           // false
    System.out.println(checkWithRegex("0123456"));           // false
}

/**
 * 使用正则表达式,验证一个字符串是否是一个合法的QQ号码
 * @param str 字符串
 * @return 验证的结果
 */
private static boolean checkWithRegex(String str) {
    return str.matches("[1-9]\\d{5,10}");
}

/**
 * 验证一个字符串是否是一个合法的QQ号码
 * @param str 字符串
 * @return 验证的结果
 */
private static boolean check(String str) {
    // 1. 校验长度
    if (str.length() < 6 || str.length() > 11) {
        return false;
    }
    // 2. 校验纯数字组成
    try {
        Long.parseLong(str);
    }
    catch (NumberFormatException e) {
        // 说明不是纯数字,无法转成long型的变量
        return false;
    }
    // 3. 首字符校验
    return str.charAt(0) != '0';
}

}


### **14.2. 基本的元字符**


#### **14.2.1. 正则表达式的匹配规则**


逐个字符进行匹配, 判断是否和正则表达式中定义的规则一致。


以下借助 String 类中的 matches 方法进行正则基础的语法讲解。



> 
>  boolean matches(String regex); 
>    
>  是String类中的非静态方法, 使用字符串对象调用这个方法, 参数是一个正则表达式。 
>    
>  使用指定的正则表达式, 和当前的字符串进行匹配。 验证当前的字符串是否和指定的规则是相匹配的。 
> 


**14.2.2. 元字符**


![](https://img-blog.csdnimg.cn/cecd4c29cc4e4444bcd1ad44b4e1f2bd.png)


**14.2.3. 示例代码**



/**

  • @Description 正则表达式的基础语法
    */
    public class Regex2 {
    public static void main(String[] args) {
    // 校验规则:
    System.out.println(“,ello”.matches(“[ahj1,8]ello”));
    System.out.println(“fello”.matches(“[a-z]ello”));
    // 需求: 首位字符,可以是任意的小写字母,或者是 HAQ
    System.out.println(“Hello”.matches(“[Ha-zAQ]ello”));
    // 需求: 首位字符,可以是任意的字母,包括大写字母和小写字母
    System.out.println(“hello”.matches(“[a-zA-Z]ello”));
    // 需求: 首位字符,可以是除了h之外的任意字符
    System.out.println(“Hello”.matches(“[^hel]ello”));
    // 需求: 首位字符,不可以是任意的小写字母,但是 h、e、q 除外
    System.out.println(“lello”.matches(“[^a-z[heq]]ello”));

     // 希望首位字符,可以是 h e [
     System.out.println("]ello".matches("[he\\[]ello"));
     // 希望首位字符,可以是 a - z
     System.out.println("hello".matches("[az-]ello"));
     
     System.out.println("hello".matches("hel+o"));
     System.out.println("hello".matches("hel?o"));
     System.out.println("heo".matches("hel*o"));
    
     System.out.println("hello".matches("hel{3}o"));
     System.out.println("hello".matches("hel{3,}o"));
     System.out.println("hello".matches("hel{3,5}o"));
     
     // 需求: 匹配一个字符串可以是 126 或者是 163 或者是 qq 或者是 QQ
     System.out.println("123".matches("126|163|qq|QQ"));
     // 需求: 匹配一个qq邮箱、126邮箱、163邮箱
     System.out.println("admin@sina.com".matches("admin@(qq|126|163)\\.com"));
    

    }
    }


### **14.3. String类中的常用的方法**


#### **14.3.1. 字符串的匹配**



// QQ号的规则:
// 1. 纯数字组成的
// 2. 不能以0作为开头
// 3. 长度在 [6,11]
private static boolean chechQQ(String qqNumber) {
return qqNumber.matches(“[1-9]\d{5,10}”);
}

// 验证邮箱的合法性
// 1. 126
// 2. 前半部分可以是任意的单词字符, 长度限制在 [4,12]
// 3. 以.com作为结尾
private static boolean checkEmail(String email) {
return email.matches(“\w{4,12}@126\.com”);
}


**14.3.2. 字符串的切割**



private static void split() {
// 需求: 将一个存储有所有的姓名的字符串,切割出每一个名字。
String names = “lily lucy polly Jim LiLei HanMeimei”;
// 实现: 借助字符串的一个方法 split(String regex)
// 将字符串中,满足正则规则的子部分,切割掉
String[] nameArr = names.split(" +");
System.out.println(Arrays.toString(nameArr));
}


#### **14.3.3. 字符串的替换**



private static void replace() {
// 需求: 将这个存储有所有的名字的字符串,名字之间的分隔用, 来替代
String names = “lily lucy polly Jim LiLei HanMeimei”;
// 实现: 借助字符串中的一个方法 replaceAll(String regex, String replacement)
// 将字符串中,满足指定正则的部分,替换成 replacement
// String result = names.replaceAll(" +", “, “);
String result = names.replaceFirst(” +”, ", ");
System.out.println(result);
}




private static void example() {
// 需求: 将一个手机号的中间4位替换成 ****
// 17788889999 => 1779999
String phoneNumber = “17788889999”;
// 在replace方法中,使用$1获取第一个分组的值
String result = phoneNumber.replaceAll(“(1\d{2})(\d{4})(\d{4})”, "$1
$3");
System.out.println(result);
}


### **14.4. Pattern和Matcher类**


#### **14.4.1. 简介**


在 java.util.regex 包中


**Pattern类:** 在Java中, 正则表达式的载体。 使用正则表达式进行字符串的校验、 切割、 替换, 都需要使用到这个类。



> 
>  在Java中, 使用字符串的形式来写正则表达式。 此时, 如果需要这个字符串被当做是一个正则表达式使用, 必须先由这样的字符串, 编译为 Pattern 类的对象。 然后才可以使用这个对象的某些方法, 进行常见的操作(校验、切割、替换)。 
> 


**Matcher类:**在Java中, 对一个正则校验的结果描述。


**14.4.2. 常用方法**


![](https://img-blog.csdnimg.cn/1abd27104feb4fd8a4e2f289109cb81e.png)


**find()**




![img](https://img-blog.csdnimg.cn/img_convert/2daba5685ae258617a1d0d71c23ba701.png)
![img](https://img-blog.csdnimg.cn/img_convert/1139d6b17da3e12eebda189ce62822d7.png)
![img](https://img-blog.csdnimg.cn/img_convert/c2d7bd1434a45cb4cf38a40e1d52ec8f.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**

798117619)]

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**

  • 23
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值