当前位置: 首页 > article >正文

Java中正则表达式的介绍、使用场景及示例代码

一、前言

Java中的正则表达式是一种强大的文本处理工具,它允许你通过特定的模式来匹配、查找、替换或验证字符串。Java的正则表达式功能通过java.util.regex包提供,其中Pattern类表示编译后的正则表达式,而Matcher类则用于对输入字符串进行匹配操作。

二、正则表达式的基础

  • 字符类‌:如.(匹配任意字符)、\d(匹配数字)、\w(匹配字母或数字或下划线)等。
  • 数量词‌:如*(匹配0次或多次)、+(匹配1次或多次)、?(匹配0次或1次)、{n}(匹配n次)、{n,}(匹配n次或更多次)、{n,m}(匹配n到m次)等。
  • 锚点‌:如``(匹配字符串的开始)、$(匹配字符串的结束)、\b(匹配单词边界)等。
  • 分组和捕获‌:用()来分组,捕获的组可以通过反向引用进行访问,如\1\2等表示第一、第二个捕获组。
  • 或操作‌:用|表示“或”的关系。
  • 转义字符‌:在正则表达式中,某些字符具有特殊含义,如果要匹配这些字符本身,需要使用\进行转义,如\.匹配点字符。

三、Java中的正则表达式类

  • Pattern类‌:

    • Pattern.compile(String regex):将给定的正则表达式编译成一个模式。
    • Pattern.matcher(CharSequence input):创建一个匹配器,用于将输入序列与该模式进行匹配。
  • Matcher类‌:

    • boolean matches():尝试将整个区域与模式匹配。
    • boolean lookingAt():尝试从输入序列的开头开始匹配模式。
    • boolean find():尝试在输入序列中查找与该模式匹配的下一个子序列。
    • int start() / int end():返回当前匹配的起始和结束索引。
    • String group() / String group(int group):返回由之前的匹配操作所匹配的输入子序列,或指定组的子序列。

四、常见应用场景

  1. 校验输入‌:使用正则表达式来校验用户输入的格式,如邮箱地址、电话号码、身份证号码等。
  2. 文本搜索‌:在大量文本中搜索符合特定模式的字符串,如查找所有包含特定单词的句子。
  3. 文本替换‌:将文本中符合特定模式的字符串替换为其他字符串,如将文本中的所有数字替换为星号。
  4. 字符串分割‌:根据正则表达式来分割字符串,如将逗号分隔的字符串分割为数组

五、示例代码

以下是一个简单的Java正则表达式示例,用于验证一个字符串是否为有效的电子邮件地址:

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

public class RegexExample {
    public static void main(String[] args) {

        // 定义电子邮件地址的正则表达式模式
        String regex = "[A-Za-z0-9+_.-]+@[A-Za-z0-9.-]+$";

        // 编译正则表达式
        Pattern pattern = Pattern.compile(regex);

        // 要匹配的输入字符串
        String input = "example@example.com";

        // 创建匹配器
        Matcher matcher = pattern.matcher(input);

        // 进行匹配操作并输出结果
        if (matcher.matches()) {
            System.out.println("有效的电子邮件地址!");
        } else {
            System.out.println("无效的电子邮件地址!");
        }
    }
}

以下是一个简单的示例,演示如何使用Java正则表达式来匹配字符串中的数字:

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

public class RegexExample {
    public static void main(String[] args) {

        // 定义正则表达式模式
        String regex = "\\d+";

        // 编译正则表达式模式
        Pattern pattern = Pattern.compile(regex);

        // 要匹配的输入字符串
        String input = "The number is 12345 and the other number is 67890.";

        // 获取Matcher对象
        Matcher matcher = pattern.matcher(input);
        
        // 查找并打印所有匹配的数字
        while (matcher.find()) {
            System.out.println("Found number: " + matcher.group());
        }
    }
}

以下是一个简单的示例,演示如何使用Java正则表达式来验证电话号码:

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

public class PhoneNumberValidator {
    private static final String PHONE_NUMBER_REGEX = "^1[34578]\\d{9}$";

    public static boolean validatePhoneNumber(String phoneNumber) {
        Pattern pattern = Pattern.compile(PHONE_NUMBER_REGEX);
        Matcher matcher = pattern.matcher(phoneNumber);
        return matcher.matches();
    }

    public static void main(String[] args) {
        String phoneNumber = "13800138000";
        boolean isValid = validatePhoneNumber(phoneNumber);
        System.out.println("电话号码是否有效: " + isValid);
    }
}

以下是一个简单的示例,演示如何使用Java正则表达式来验证身份证号码:

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

public class IDCardValidator {

    // 15位身份证正则表达式
    private static final String IDCARD15_REGEX = "^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}$";

    // 18位身份证正则表达式
    private static final String IDCARD18_REGEX = "^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}(\\d|X|x)$";

    public static boolean isValidIDCard(String idCard) {
        Pattern pattern15 = Pattern.compile(IDCARD15_REGEX);
        Pattern pattern18 = Pattern.compile(IDCARD18_REGEX);
        Matcher matcher15 = pattern15.matcher(idCard);
        Matcher matcher18 = pattern18.matcher(idCard);
        return matcher15.matches() || matcher18.matches();
    }

    public static void main(String[] args) {
        String idCard = "11010519491231002X";
        boolean isValid = isValidIDCard(idCard);
        System.out.println("身份证号码是否有效: " + isValid);
    }
}


http://www.kler.cn/a/446867.html

相关文章:

  • 数据结构_平衡二叉树
  • TDesign:NavBar 导航栏
  • 前端yarn工具打包时网络连接问题排查与解决
  • 如何使用 WebAssembly 扩展后端应用
  • Web3.0安全开发实践:探索比特币DeFi生态中的PSBT
  • imx6ull qt多页面控制系统(正点原子imx系列驱动开发)
  • Java学习,输出数组元素
  • 31.设计模式
  • Element@2.15.14-tree checkStrictly 状态实现父项联动子项,实现节点自定义编辑、新增、删除功能
  • Java基础面试题17:GenericServlet和HttpServlet有什么区别?
  • 【Java】mac安装Java17(JDK17)
  • 前端数据持久化指南:LocalStorage、SessionStorage 等的区别与应用
  • 从零用java实现 小红书 springboot vue uniapp (4)个人主页优化
  • 首个!艾灵参编的工业边缘计算国家标准正式发布
  • Epic游戏使用mod
  • MySQL通过日志恢复数据的步骤
  • Java中的方法重写:深入解析与最佳实践
  • debian linux 连网自动调整时间 (报错 Unit systemd-timesyncd.service could not be found.)
  • .NET周刊【12月第2期 2024-12-08】
  • pytorch离线安装步骤
  • 中阳动态分散投资策略:构建多元化投资组合的科学路径
  • 前端引入字体文件
  • 点云空洞的边界识别提取 pso-bp 神经网络的模型来修复点云空洞 附python代码
  • DataFrame to list(pandas框架转列表)
  • MySQL三大日志-Binlog
  • linux作 samba 服务端,linux windows文件互传,免账号密码