当前位置:

首页 > 编程开发 > 正则表达式的整理与归纳(附例子)

正则表达式的整理与归纳(附例子)

正则表达式由普通字符和元字符构成,元字符包括点号、中括号、竖线、锚点(^和$)及反斜线转义。常用量词有*、+、?、{n}等,预定义字符如\d、\s,自定义字符用方括号。一个Java示例演示了利用正则从日志中提取姓名并去重。

本文目录

    正则表达式,说白了就是由普通字符(比如 a 到 z)和特殊字符(也就是元字符)拼出来的一种文本模式。举个例子,[a-z]* 这个表达式描述的就是所有只包含小写字母的字符串——这里面 a、z 是普通字符,而连字符、左右中括号以及星号,都属于元字符的范畴。

    正则表达式中的元字符的类别

    1. 点号
    点号能匹配除换行符(\n)之外的任意单个字符。简单说就是“一个位置,除了回车啥都行”。

    2. 中括号
    中括号 [] 允许你指定一组字符,匹配时只认你写进去的那几个。比如 [abc] 就只匹配 a、b 或 c 中的一个。

    3. 竖线
    竖线 | 好比逻辑“或”,匹配它左边或右边的任意一个模式。

    4. ^ 符号
    ^ 匹配一行的开头位置。在正则里它经常作为“起始锚点”使用。

    5. 美元符号
    $ 匹配一行的结尾,和 ^ 正好相反,一个管头一个管尾。

    6. 反斜线
    反斜线 \ 的作用是“转义”——把它后面的元字符变成普通字符。比如你要匹配一个真实的点号,就得写成 \.。

    常用的匹配次数元符号

    元字符含义
    X*匹配 X 出现零次或多次,比如 Y、YXXXY
    X+匹配 X 出现一次或多次,比如 YXY、YXX
    X?匹配 X 出现零次或一次,比如 Y、YXY
    X{n}匹配 X 恰好出现 n 次
    X{n,}匹配 X 出现至少 n 次
    X{n,m}n ≤ m,匹配 X 出现至少 n 次,最多 m 次

    预定义字符(只匹配一个字符)

    元字符含义
    \d数字,相当于 [0-9]
    \D非数字,相当于 [^0-9]
    \s空白字符,相当于 [\t\n\x0B\f\r]
    \S非空白字符,相当于 [^\s]
    \w单词字符,相当于 [a-zA-Z_0-9]
    \W非单词字符,相当于 [^\w]
    \b单词边界
    \B非单词边界
    \A输入的开头
    \G上一个匹配的结尾

    自定义字符(只匹配一个字符)

    元字符含义
    [abc]只能是 a,b 或 c
    [^abc]除了 a,b,c 之外的任何字符
    [a-zA-Z]a 到 z 或 A 到 Z(范围)
    [a-d[m-p]]a 到 d 或 m 到 p(并集)
    [a-z&&[bcd]]a-z 和 bcd 的交集,即 b,c,d
    [a-z&&[^bcd]]a-z 和非 bcd 的交集,等同于 [ae-z]
    [a-z&&[^m-p]]a-z 和除了 m 到 p 的交集,等同于 [a-lq-z]

    举例如下

    下面这个 Ja va 示例演示了如何通过正则表达式从日志中提取人物姓名并去重。代码不算复杂,但很实用:

    import ja va.util.ArrayList;
    import ja va.util.List;
    
    public class MyMain {
        public static void main(String[] args) {
            String log = "张三10:23:0:802023-10-09 09:21:22"
                    + "李四115:203:10:1802023-05-09 19:21:22"
                    + "王五115:203:10:1802023-05-09 19:21:22"
                    + "张三11:22:0:802024-11-09 07:21:25";
            // 以日期时间格式为分隔符拆分日志,得到 [姓名+数字] 的数组
            String[] nameIPs = log.split("\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}");
            List names = new ArrayList();
            for (String nameIP : nameIPs) {
                int index = -1;
                // 找到第一个数字的位置
                for (int i = 0; i < nameIP.length(); i++) {
                    if (nameIP.charAt(i) >= '0' && nameIP.charAt(i) <= '9') {
                        index = i;
                        break;
                    }
                }
                // 从开头到第一个数字之前的部分就是姓名
                String name = nameIP.substring(0, index);
                names.add(name);
            }
            // 对 List 中的姓名去重
            List nameUniques = new ArrayList();
            for (String name : names) {
                if (!nameUniques.contains(name)) {
                    nameUniques.add(name);
                }
            }
            for (String name : nameUniques) {
                System.out.println(name);
            }
        }
    }

    运行结果

    正则表达式的整理与归纳(附例子)

    其它方面的细节及注意事项

    1. 反斜线是转义字符,用于改变后面字符的原本含义。在程序里写正则时,\\d 才表示一个数字字符,这一点很容易踩坑。
    2. 正则表达式是从左到右逐个字符去匹配,一个表达式通常只对应一个字符(除非用了量词)。
    3. matches() 方法可以用来判断整个字符串是否满足正则,返回 true 或 false,非常适合做格式校验。
    4. 需要求两个字符范围的交集时,记得写成 &&,如果只写一个 &,那它就是个普通字符,不是交集运算。
    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发
    相关文章 更多
    llama.cpp 后端更新:Adreno 分解注意力、CUDA 空分块修复与 SYCL 缓存
    llama.cpp 后端更新:Adreno 分解注意力、CUDA 空分块修复与 SYCL 缓存

    llama.cpp b12314为Adreno OpenCL加入分解Flash Attention,b12316修复CUDA MoE空分块路径读取,b12319源码标签改用SYCL线程本地设备ID缓存。三个后端、两种发布阶段需分别核对,不能合并成统一性能提升或全平台安全结论。

    LangChain JS 适配包更新:MCP与OpenAI提高Zod下限,连接器同步依赖
    LangChain JS 适配包更新:MCP与OpenAI提高Zod下限,连接器同步依赖

    LangChain JS的MCP、IBM、OpenAI及Tavily适配包要求安装Zod 4.6.6及以上,OpenRouter、Together AI、xAI和Neo4j同步相关依赖。本文区分直接安全约束与传递依赖更新,给出锁文件和schema兼容性核对方法。

    LangChain Core 1.8.0:最低 Python 升至3.11,加入决策模型能力
    LangChain Core 1.8.0:最低 Python 升至3.11,加入决策模型能力

    langchain-core 1.8.0结束Python 3.10支持,最低要求变为Python 3.11,并加入decision models。Python 3.10仍会解析到1.7.x;升级前应同时核对解释器、锁文件、CI镜像与部署运行时,不把TypeSafe包的迁移要求混同于全部LangChain包。

    GitHub Copilot CLI 1.0.110-2:压缩遵守会话额度,修复插件设置覆盖
    GitHub Copilot CLI 1.0.110-2:压缩遵守会话额度,修复插件设置覆盖

    GitHub Copilot CLI 1.0.110-2预发布补丁让/compact遵守会话AI credit限制,改进失败回复标记,并修复无效配置时插件操作覆盖其他设置的问题。会话清理会跳过其他进程正在使用的会话,适合核对多终端与插件工作流。

    Ducter 0.0.42:消息定向回复上线,串联密钥卡片与 Mac 手机操作
    Ducter 0.0.42:消息定向回复上线,串联密钥卡片与 Mac 手机操作

    Ducter 0.0.42加入对单条消息及选中文字回复;本轮0.0.39—0.0.41还调整主动提醒、密钥请求卡片及Mac上的手机和应用操作。更新涉及本地权限与远端执行边界,应按版本逐项确认,而非默认所有设备都能使用全部功能。

    Qwen Code 1.0.0-preview.1:修复订阅模型登录,支持 Qoder 并行工具调用
    Qwen Code 1.0.0-preview.1:修复订阅模型登录,支持 Qoder 并行工具调用

    Qwen Code 1.0.0-preview.1修复订阅账号登录后无法使用订阅模型的问题,模型目录随登录状态更新,并同步0.27.x模型目录与思考预算映射。Qoder模型支持并行工具调用;这是预览版补丁,需要单独验证配置兼容。

    OpenCode PTY 0.5.2:发布 protocol 8 终端服务组件
    OpenCode PTY 0.5.2:发布 protocol 8 终端服务组件

    OpenCode发布opencode-pty 0.5.2终端服务组件,使用protocol 8并以@opencode/pty@0.5.2发布到npm。它面向集成终端子进程的开发者,采用MIT许可,仍被项目说明为实验性服务核心,不是OpenCode整款应用的版本号。

    vLLM 0.34.0rc2 源码标签:调整可扩展 KV Cache 测试内存参数
    vLLM 0.34.0rc2 源码标签:调整可扩展 KV Cache 测试内存参数

    vLLM出现0.34.0rc2候选源码标签,关联提交移除多处可扩展KV Cache测试和基准中的固定gpu_memory_utilization设置,并调整相关文档。当前核验的是标签与代码提交,不能将其当作正式版安装包或全局显存默认值变更。

    llama.cpp b12318:新增 CUDA 调试缓冲池与 Sanitizer 说明
    llama.cpp b12318:新增 CUDA 调试缓冲池与 Sanitizer 说明

    llama.cpp b12318新增CUDA调试缓冲池,并补充与compute-sanitizer相关的代码说明。它是面向CUDA开发调试路径的预发布构建,不能据此推断普通推理速度、显存占用或所有后端发生同等变化。

    llama.cpp b12307:修复 Metal SOLVE_TRI 内核越界读取
    llama.cpp b12307:修复 Metal SOLVE_TRI 内核越界读取

    llama.cpp b12307修复Metal后端SOLVE_TRI内核的越界读取,属于预发布构建中的特定计算路径补丁。使用Metal后端的开发者应核对是否涉及该算子,并验证模型加载与推理;公告未给出CVE、确认利用或统一性能结论。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。