Java正则表达式

什么是正则表达式?

正则表达式是一种用于匹配字符串模式的强大工具,它定义了一套特殊的语法规则,可以用来:
查找文本
验证格式
替换文本
提取信息
常用正则表达式工具:https://www.jyshare.com/front-end/854/

为什么要用正则?

简化代码:不需要写复杂的字符串处理逻辑
提高效率:一行代码就能完成复杂的字符串匹配
可维护性:模式易于修改和维护
标准化:跨语言的通用解决方案

正则解决什么问题?

电话号码验证
邮箱格式检查
密码强度验证
URL解析
日期格式验证
文本解析和提取

正则表达式常用语法

// 常用正则表达式符号
^       // 开始
$       // 结束
\d      // 数字 [0-9]
\w      // 字母数字下划线 [a-zA-Z0-9_]
\s      // 空白字符
.       // 任意字符
*       // 0或多次
+       // 1或多次
?       // 0或1次
{n}     // 正好n次
{n,}    // 至少n次
{n,m}   // n到m次
[abc]   // a或b或c
[^abc]  // 除了a,b,c之外的字符
(...)   // 分组
|       //

Java中使用正则的方式

下面是一个综合示例,展示了正则表达式的多种用法:

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

public class RegexDemo {
    public static void main(String[] args) {
        // 1. 基本匹配示例
        basicMatching();

        // 2. 提取信息示例
        extractInformation();

        // 3. 替换文本示例
        replaceText();

        // 4. 实际应用示例:解析日志
        parseLog();
    }

    /**
     * 基本匹配示例
     */
    private static void basicMatching() {
        // 验证手机号
        String phoneRegex = "^1[3-9]\\d{9}$";
        String phone1 = "13812345678";
        String phone2 = "1381234567";  // 错误格式
        
        System.out.println("手机号验证:");
        System.out.println(phone1 + " is valid: " + Pattern.matches(phoneRegex, phone1));  // true
        System.out.println(phone2 + " is valid: " + Pattern.matches(phoneRegex, phone2));  // false

        // 验证邮箱
        String emailRegex = "^[A-Za-z0-9+_.-]+@(.+)$";
        String email1 = "test@example.com";
        String email2 = "invalid.email@";
        
        System.out.println("\n邮箱验证:");
        System.out.println(email1 + " is valid: " + Pattern.matches(emailRegex, email1));  // true
        System.out.println(email2 + " is valid: " + Pattern.matches(emailRegex, email2));  // false
    }

    /**
     * 提取信息示例
     */
    private static void extractInformation() {
        String text = "My phone number is 13812345678 and my email is test@example.com";
        
        // 提取手机号
        Pattern phonePattern = Pattern.compile("1[3-9]\\d{9}");
        Matcher phoneMatcher = phonePattern.matcher(text);
        
        System.out.println("\n提取手机号:");
        while (phoneMatcher.find()) {
            System.out.println("Found phone: " + phoneMatcher.group());
        }

        // 提取邮箱
        Pattern emailPattern = Pattern.compile("[A-Za-z0-9+_.-]+@[A-Za-z0-9.-]+");
        Matcher emailMatcher = emailPattern.matcher(text);
        
        System.out.println("\n提取邮箱:");
        while (emailMatcher.find()) {
            System.out.println("Found email: " + emailMatcher.group());
        }
    }

    /**
     * 替换文本示例
     */
    private static void replaceText() {
        String text = "My phone is 13812345678, please contact me.";
        
        // 将手机号中间4位替换为****
        String maskedText = text.replaceAll("(1[3-9]\\d{3})\\d{4}(\\d{4})", "$1****$2");
        
        System.out.println("\n替换文本:");
        System.out.println("Original: " + text);
        System.out.println("Masked: " + maskedText);
    }

    /**
     * 实际应用示例:解析日志
     */
    private static void parseLog() {
        String logLine = "2024-01-20 10:15:30 [INFO] User(id=123) logged in from 192.168.1.1";
        
        // 解析日志的正则表达式
        String logRegex = "^(\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}) \\[(\\w+)\\] User\\(id=(\\d+)\\) (.+)$";
        Pattern pattern = Pattern.compile(logRegex);
        Matcher matcher = pattern.matcher(logLine);
        
        System.out.println("\n解析日志:");
        if (matcher.find()) {
            System.out.println("Timestamp: " + matcher.group(1));
            System.out.println("Log Level: " + matcher.group(2));
            System.out.println("User ID: " + matcher.group(3));
            System.out.println("Message: " + matcher.group(4));
        }
    }
}```




运行结果示例

手机号验证:
13812345678 is valid: true
1381234567 is valid: false

邮箱验证:
test@example.com is valid: true
invalid.email@ is valid: false

提取手机号:
Found phone: 13812345678

提取邮箱:
Found email: test@example.com

替换文本:
Original: My phone is 13812345678, please contact me.
Masked: My phone is 1381****5678, please contact me.

解析日志:
Timestamp: 2024-01-20 10:15:30
Log Level: INFO
User ID: 123
Message: logged in from 192.168.1.1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个处女座的程序媛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值