正则表达式(regular expression)

发布于:2025-03-21 ⋅ 阅读:(11) ⋅ 点赞:(0)

💡 正则表达式(Regular Expression, regex)知识点总结 💡

正则表达式是一种用于匹配字符串的模式,广泛用于搜索、替换、验证等操作。


📌 正则表达式的主要作用

1️⃣ 字符串匹配 🧐

  • 检查一个字符串是否符合某种模式。
  • 例如,验证用户输入的邮箱手机号密码强度等。

2️⃣ 搜索和提取 🔍

  • 在大量文本中找到符合要求的内容。
  • 例如,从网页中提取URL、邮箱、电话号码等。

3️⃣ 字符串替换 🔄

  • 将符合规则的文本替换为指定内容。
  • 例如,把多个空格替换成一个空格

4️⃣ 数据格式化 ✏️

  • 规范化文本数据,如日期格式转换、去除特殊字符等。

5️⃣ 日志分析 📊

  • 通过正则表达式分析日志文件,提取错误信息IP 地址等重要数据。

📌 正则表达式的基础

  1. 普通字符匹配

    • abc 只能匹配 "abc",不会匹配 "aabc""abcd" 等。
  2. 特殊字符(元字符)

    元字符 含义 示例
    . 任意单个字符(换行符除外) "a.c" 可匹配 "abc""aac"
    \d 数字 [0-9] "12\d" 可匹配 "123""125"
    \w 字母、数字或下划线 [a-zA-Z0-9_] "\w+" 可匹配 "hello123"
    \s 空白字符(空格、制表符、换行符) "a\sb" 可匹配 "a b"
    \b 单词边界 "\bcat\b" 匹配 "cat" 但不匹配 "catalog"
    ^ 匹配行首 "^abc" 只匹配 "abc" 在行首的情况
    $ 匹配行尾 "xyz$" 只匹配 "xyz" 在行尾的情况

📌 量词(控制匹配次数)

量词 含义 示例
* 匹配 0 次或多次 a* 匹配 """a""aaaa"
+ 匹配 1 次或多次 a+ 匹配 "a""aaaa",但不匹配 ""
? 匹配 0 次或 1 次 a? 匹配 """a"
{n} 匹配 n a{3} 仅匹配 "aaa"
{n,} 至少匹配 n a{2,} 匹配 "aa""aaa"
{n,m} 匹配 nm a{2,4} 匹配 "aa""aaa""aaaa"

📌 字符类(Character Classes)

语法 含义 示例
[abc] 只匹配 abc gr[ae]y 可匹配 "gray""grey"
[^abc] a、b、c 以外的任何字符 "[^aeiou]" 匹配所有辅音字母
[0-9] 匹配 0~9 的任何数字 "[0-9]+" 匹配 "123""456"
[a-z] 匹配小写字母 "[a-z]+" 匹配 "hello"
[A-Z] 匹配大写字母 "[A-Z]+" 匹配 "HELLO"

📌 逻辑运算符

语法 含义 示例
` ` 逻辑 OR(或)
() 分组 "(ab)+" 可匹配 "ab""abab"
(?:...) 非捕获分组 "(?:ab)+" 仅匹配 "abab",但不存储匹配内容

📌 常见正则表达式

1️⃣ 匹配邮箱 📧:

^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$

✅ 可匹配 "test.email@example.com"

2️⃣ 匹配手机号 📱(以中国手机号 1 开头):

^1[3-9]\d{9}$

✅ 可匹配 "13812345678"

3️⃣ 匹配 IP 地址 🌐:

^(25[0-5]|2[0-4][0-9]|1?[0-9]?[0-9])\.
(25[0-5]|2[0-4][0-9]|1?[0-9]?[0-9])\.
(25[0-5]|2[0-4][0-9]|1?[0-9]?[0-9])\.
(25[0-5]|2[0-4][0-9]|1?[0-9]?[0-9])$

✅ 可匹配 "192.168.1.1"

4️⃣ 匹配日期(YYYY-MM-DD) 📆:

^(19|20)\d\d-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$

✅ 可匹配 "2024-03-14"


📌 Java 正则表达式示例

import java.util.regex.*;

public class RegexExample {
    public static void main(String[] args) {
        String text = "hello regex 123!";
        String pattern = "\\d+"; // 匹配数字

        Pattern p = Pattern.compile(pattern);
        Matcher m = p.matcher(text);

        while (m.find()) {
            System.out.println("匹配到: " + m.group());
        }
    }
}

🔹 输出

匹配到: 123

📌 小结

正则表达式的核心知识点
元字符(特殊字符). \d \w \s ^ $
量词* + ? {n,m}
字符类[abc] [a-z] [^0-9]
逻辑运算| ()
常见应用:邮箱、手机号、IP 地址等