JavaSE——正则表达式(2/2):应用案例、查找信息、用于搜索替换、分割内容

简介: JavaSE——正则表达式(2/2):应用案例、查找信息、用于搜索替换、分割内容

应用案例

请使用正则表达式完成如下需求:

校验用户输入的电话、邮箱是否合法

校验电话

import java.util.Scanner;
 
public class Regextest {
    public static void main(String[] args) {
        checkPhone();
    }
    public static void checkPhone(){
        while(true){
            System.out.println("请您输入您的电话号码(手机|座机):");
            Scanner sc = new Scanner(System.in);
            String phone = sc.nextLine();  //接收一行数据
 
            //手机号码正确格式:13437542098
            //座机号码正确格式:010-3424242424 || 0104665354
            if(phone.matches("(1[3-9]\\d{9})|(0\\d{2,7}-?[1-9]\\d{4,19})")){
                System.out.println("您输入的号码格式正确");
                break;
            }else{
                System.out.println("您输入的号码格式不正确!");
            }
        }
    }
}

运行结果:


校验邮箱

import java.util.Scanner;
 
public class Regextest {
    public static void main(String[] args) {
        checkEmail();
    }
    public static void checkEmail(){
        while(true){
            System.out.println("请您输入您的邮箱:");
            Scanner sc = new Scanner(System.in);
            String email = sc.nextLine();
            /*
            * okokok009@163.com
            * 2668834948@qq.com
            * morefun@lemon.com.cn
             */
            if(email.matches("\\w{2,}@\\w{2,20}(\\.\\w{2,10}){1,2}")){
                System.out.println("您输入的邮箱格式正确");
                break;
            }else{
                System.out.println("您输入的邮箱格式不正确!");
            }
        }
    }
}

运行结果:


查找信息

  • 使用正则表达式查找一段文本中的内容

需求:从以下内容中爬取出,手机,邮箱,座机、400电话等信息。


"程序员学习Java,\n" +


"电话:1866668888,18699997777\n" +


"或者联系邮箱:2668834948@qq.com,\n" +


"座机电话:01036517895,010-98951256\n” +


"邮箱:buzhi@itopen.cn,\n" +


"邮箱:dLei0009@163.com,\n” +


"热线电话:400-618-9090,400-618-4000,4006184000,4006189090";

(为固定代码,可以简单记住)

import java.util.regex.Matcher;
import java.util.regex.Pattern;
 
public class Regextest2 {
    public static void main(String[] args) {
        String data = "程序员学习Java,\n" +
                "电话:1866668888,18699997777\n" +
                "或者联系邮箱:2668834948@qq.com,\n" +
                "座机电话:01036517895,010-98951256\n" +
                "邮箱:buzhi@itopen.cn,\n" +
                "邮箱:dLei0009@163.com,\n" +
                "热线电话:400-618-9090,400-618-4000,4006184000,4006189090";
        
        //1.定义爬取规则
        String regex = "(1[3-9]\\d{9})|(0\\d{2,7}-?[1-9]\\d{4,19})|\\w{2,}@\\w{2,20}(\\.\\w{2,10}){1,2}" +
                "|(400-?\\d{3,7}-?\\d{3,7})";
 
        //2.把正则表达式封装成一个Pattern对象
        Pattern pattern = Pattern.compile(regex);
 
        //3.通过Pattern对象去获取查找内容的匹配器对象
        Matcher matcher = pattern.matcher(data);
 
        //4.定义一个循环开始爬取信息
        while(matcher.find()){
            String rs = matcher.group();  //获取到了找到的内容了
            System.out.println(rs);
        }
    }
}

运行结果:


用于搜索替换、分割内容

正则表达式用于搜索替换、分割内容,需要结合String提供的如下方法完成:

图片.png

搜索替换

需求1:请把古力娜扎ai8888迪丽热巴999aa5566马尔扎哈fbbfsfs42425卡尔扎巴,中间的非中文字符替换成"_"

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

运行结果:


需求2(拓展):某语音系统,收到一个口吃的人说的"我我我喜欢编编编编编编编编编编编编程程程!”,需要优化成"我喜欢编程!"

package user.RegularExpression;
 
public class Regextest3 {
    public static void main(String[] args) {
        //需求2(拓展):某语音系统,收到一个口吃的人说的"我我我喜欢编编编编编编编编编编编编程程程!”,需要优化成"我喜欢编程!"
        String s2 = "我我我喜欢编编编编编编编编编编编编程程程!";
        /*
        * (.)一组:  .匹配任意字符
        * \\1:      为这个组声明一个组号:1号
        * +:        声明必须是重复的字
        * $1        可以去取到第1组代表的那个重复的字
         */
        System.out.println(s2.replaceAll("(.)\\1+", "$1"));
    }
}

运行结果:


分割内容

需求:请把古力娜扎ai8888迪丽热巴999aa5566马尔扎哈fbbfsfs42425卡尔扎巴,中的人名获取出来。

package user.RegularExpression;
 
import java.util.Arrays;
 
public class Regextest3 {
    public static void main(String[] args) {
        //2.public String[] spLit(String regex):按照正则表达式匹配的内容进行分割字符串,反回一个字符串数组。
        String s3 = "古力娜扎ai8888迪丽热巴999aa5566马尔扎哈fbbfsfs42425卡尔扎巴";
        String[] names = s3.split("\\w+");
        System.out.println(Arrays.toString(names));
    }
}

运行结果:



END



目录
相关文章
|
1月前
|
关系型数据库 MySQL
Mysql基础第十二天,用正则表达式进行搜索
Mysql基础第十二天,用正则表达式进行搜索
32 0
Mysql基础第十二天,用正则表达式进行搜索
|
1月前
|
Java 测试技术
Java一分钟之-正则表达式在Java中的应用
【5月更文挑战第14天】正则表达式是Java中用于文本处理的强大力量,通过`java.util.regex`包支持。常见问题包括元字符的理解、边界匹配和贪婪/懒惰量词的使用。错误通常涉及未转义特殊字符、不完整模式或过度匹配。要避免这些问题,需学习实践、使用在线工具和测试调试。示例代码展示了如何验证邮箱地址。掌握正则表达式需要不断练习和调试。
38 2
|
16天前
|
Python
Python使用正则表达式分割字符串
在Python中,你可以使用re模块的split()函数来根据正则表达式分割字符串。这个函数的工作原理类似于Python内置的str.split()方法,但它允许你使用正则表达式作为分隔符。
|
21天前
|
人工智能 Java 数据格式
JavaSE——正则表达式(1/2):概述、初步使用(普通方法,正则表达式)、书写规则(字符类,预定义字符,数量词,其他,特殊案例)
JavaSE——正则表达式(1/2):概述、初步使用(普通方法,正则表达式)、书写规则(字符类,预定义字符,数量词,其他,特殊案例)
24 3
|
4天前
|
Java 测试技术 API
JavaSE 面向对象程序设计 正则表达式
JavaSE 面向对象程序设计 正则表达式
11 0
|
1月前
|
Rust 监控 安全
【专栏】`ripgrep`(rg)是Linux下快速、内存高效的文本搜索工具,用Rust编写,支持PCRE2正则表达式
【4月更文挑战第28天】`ripgrep`(rg)是Linux下快速、内存高效的文本搜索工具,用Rust编写,支持PCRE2正则表达式。相比`grep`,它在处理大文件和复杂模式时更具优势。安装`rg`可通过软件包管理器,如在Debian系系统中使用`sudo apt install ripgrep`。基本用法包括简单搜索、递归搜索、忽略大小写、显示行号等。高级功能包括固定字符串搜索、多文件匹配、并行搜索、排除选项和区域搜索。适用于日志分析、代码审查等场景,是提升工作效率的利器。
|
1月前
|
Python
如何使用正则表达式提取网页中的特定信息
如何使用正则表达式提取网页中的特定信息
|
1月前
|
运维 Unix Linux
grep正则表达式搜索
grep正则表达式搜索
29 3
|
1月前
|
机器学习/深度学习 Rust JavaScript
Rust 笔记:Rust 语言中应用正则表达式
Rust 笔记:Rust 语言中应用正则表达式
242 1
|
1月前
|
数据格式 Python
Python中的正则表达式:基础与应用
Python中的正则表达式:基础与应用