

---

#### 1️⃣ 提取日志中的IP地址 🌐

**场景**：从服务器日志(Nginx, Apache等)或系统日志中提取客户端的IP地址。

*  **表达式**：`\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b`
*   **分解说明**：
    *   `\b`：单词边界，确保IP地址是独立的
    *   `(?: ... ){3}`：一个**非捕获分组**，重复3次
    *   `[0-9]{1,3}`：1到3位数字（IP的每一段）
    *   `\.`：一个 literal 的点号
*   **测试文本**：
    ```
    192.168.1.1 - - [05/Jan/2023:10:20:30] "GET /api/user HTTP/1.1"
    ERROR 10.0.0.45 Database connection failed
    ```
*   **匹配结果**：
    *   `192.168.1.1`
    *   `10.0.0.45`
*   💡 **进阶**：更严格的IP校验正则复杂得多，但这个版本在日志分析中**足够好用**。

---

#### 2️⃣ 验证强密码强度 🔒

**场景**：注册时要求密码必须包含大小写字母、数字和特殊字符，且长度至少8位。

*   **表达式**：`^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$`
*   **分解说明**（使用了**前瞻断言**）：
    *   `^`：字符串开始
    *   `(?=.*[a-z])`：**断言**后面必须至少有一个小写字母
    *   `(?=.*[A-Z])`：**断言**后面必须至少有一个大写字母
    *   `(?=.*\d)`：**断言**后面必须至少有一个数字
    *   `(?=.*[@$!%*?&])`：**断言**后面必须至少有一个特殊字符
    *   `[A-Za-z\d@$!%*?&]{8,}`：匹配由这些字符组成，且长度至少为8的字符串
    *   `$`：字符串结尾
*   **测试**：
    *   `Password123!` ✅
    *   `weak` ❌
    *   `NoSpecialChar123` ❌
*   🛡️ **价值**：前端或后端验证密码规则，无需写一堆 `if-else`。

---

#### 3️⃣ 解析和提取URL组件 🔗

**场景**：从一段文本中提取所有URL的协议、域名和路径。

*   **表达式**：`(https?):\/\/([^\/\s]+)(\/[^\s?]*)?(\?[^\s#]*)?`
*   **分解说明**（使用了**捕获分组**）：
    *   `(https?)`：**分组1**，匹配 `http` 或 `https`
    *   `:\/\/`：匹配 `://`
    *   `([^\/\s]+)`：**分组2**，匹配域名（直到遇到 `/` 或空格）
    *   `(\/[^\s?]*)?`：**分组3（可选）**，匹配路径
    *   `(\?[^\s#]*)?`：**分组4（可选）**，匹配查询参数
*   **测试文本**：
    ```
    访问我们的官网 https://www.example.com 和博客 https://blog.example.com/path/to/article?id=123
    ```
*   **匹配结果**：
    *   完整匹配1：`https://www.example.com`
        *   分组1：`https`
        *   分组2：`www.example.com`
        *   分组3：`undefined`
    *   完整匹配2：`https://blog.example.com/path/to/article?id=123`
        *   分组1：`https`
        *   分组2：`blog.example.com`
        *   分组3：`/path/to/article`
        *   分组4：`?id=123`
*   🌟 **应用**：网络爬虫、链接分析、安全扫描。

---

#### 4️⃣ 清理和格式化用户输入 🧹

**场景**：去除用户输入的字符串中所有多余的空白字符（包括换行符），只保留一个空格。

*   **表达式**：`\s+`
*   **替换为**：一个空格 `" "`
*   **分解说明**：
    *   `\s+`：匹配**一个或多个**连续的空白字符（包括空格、制表符 `\t`、换行符 `\n`、回车符 `\r`）
*   **处理前文本**：
    ```
    Hello,    how are you
    today?
    I    hope    all is well.
    ```
*   **处理后结果**：
    ```
    Hello, how are you today? I hope all is well.
    ```
*   🧽 **实用性**：在数据入库或文本分析前，做数据清洗的**必备操作**。

---

#### 5️⃣ 匹配中文内容 🇨🇳

**场景**：在混合了中英文和数字的文本中，提取出所有中文字符。

*   **表达式**：`[\u4e00-\u9fff]+`
*   **分解说明**：
    *   `[\u4e00-\u9fff]`：Unicode范围，涵盖了绝大多数常用汉字
    *   `+`：一个或多个
*   **测试文本**：
    ```
    我的电话是 138-1234-5678，欢迎致电！Welcome to 北京。
    ```
*   **匹配结果**：
    *   `我的电话是`
    *   `欢迎致电`
    *   `北京`
*   🔍 **用途**：中文NLP预处理、敏感词过滤、内容分类。

---

### 💡 给开发者的核心建议

1.  **不要重复造轮子** 🔄：像邮箱、URL、手机号验证，先去搜一下成熟的方案。但务必**理解**它的原理，并针对你的业务进行测试和微调。
2.  **在线测试工具是你的最佳伙伴** 🧪：在把正则写入代码前，一定要用 [Regex101](https://regex101.com/) 或 [RegExr](https://regexr.com/) 进行测试，它们能可视化解释你的表达式，并高亮匹配组。
3.  **注意性能** ⚡：过于复杂或嵌套很深的表达式可能导致“灾难性回溯”，在处理长文本时让程序卡死。尽量让表达式**精确**。