正则表达式进阶(二)——零宽断言详解:\b \B \K \z \A
在正则表达式中,零宽断言是一种非常强大的工具,能够在不消费字符的情况下对匹配位置进行约束。除了环视(lookahead 和 lookbehind)以外,还有一些常用的零宽断言,它们用于处理边界、字符串的开头和结尾等特殊情况。本文将详细介绍这些常用的零宽断言:\b、\B、\K、\z 和 \A。
1. \b - 单词边界 (Word Boundary)
\b 是一个零宽断言,用于匹配单词的边界。它会匹配单词字符与非单词字符之间的位置。单词字符包括字母、数字和下划线(_),而非单词字符则包括空格、标点符号等。
示例:
假设我们有以下文本:
hello world
hello123
word!
使用正则表达式 /\bhello\b/ 来匹配单词“hello”,只会匹配独立的“hello”,而不会匹配“hello123”或“word!”。
$ perl -nle 'print $& if /\bhello\b/' input.txt
输出:
hello
解释:\b 匹配了“hello”前后的边界,确保它作为独立的单词出现。如果“hello”后面有数字或符号,它就不会被匹配。
2. \B - 非单词边界 (Non-word Boundary)
\B 是与 \b 相反的零宽断言,它用于匹配非单词边界,即匹配两个单词字符或两个非单词字符之间的位置。
示例:
假设我们有以下文本:
hello world
hello123
word!
使用正则表达式 /hello\B/,它将匹配“hello123”,而不会匹配“hello world”或“word!”。
$ perl -nle 'print $& if /hello\B/' input.txt
输出:
hello123
解释:\B 匹配了“hello”与“123”之间的非单词边界,因此它能匹配“hello123”中的“hello”部分,而不匹配“hello world”。
3. \K - 忽略之前的匹配内容 (Keep)
\K 是一个非常有用的零宽断言,它允许你重置正则表达式的起始点,使其忽略\K之前的匹配内容,只返回\K之后的部分。
示例:
假设我们有以下文本:
foobar
foo123bar
foobar123
使用正则表达式 /foo\Kbar/,它只会匹配并返回 bar,而忽略之前的 foo。
$ perl -nle 'print $& if /foo\Kbar/' input.txt
输出:
bar
bar
bar
解释:\K 重置了匹配的起始点,使得正则表达式只返回 bar,而忽略了“foo”。
4. \z - 末尾匹配 (End of String)
\z 是一个零宽断言,用于确保正则表达式匹配整个字符串的结尾,而不受多行模式的影响。
示例:
假设我们有以下文本:
hello
world
hello world
在默认情况下,使用正则表达式 /world\z/ 将只匹配整个字符串的结尾。
$ perl -nle 'print $& if /world\z/' input.txt
输出:
hello world
解释:\z 确保匹配的是整个字符串的结尾,因此它匹配了“hello world”这行,因为它是字符串的结尾。
多行模式的对比:
如果我们启用多行模式(/m),$会匹配每行的结尾,而\z依然只会匹配整个字符串的末尾。
总结:\z的优势在于它不受多行模式(/m)的影响,始终确保匹配的是整个字符串的结尾,而不是每行的结尾。这在处理多行文本时非常有用,可以精确控制匹配的位置。
5. \A - 开头匹配 (Start of String)
\A 是另一个零宽断言,它用于匹配字符串的开头,类似于 ^,但是与 ^ 不同的是,\A 无论是否开启多行模式,始终匹配字符串的起始位置。
示例:
假设我们有以下文本:
hello
world
hello world
使用正则表达式 /\Ahello/,它只会匹配字符串的开始部分“hello”,无论后面是否有其他内容。
$ perl -nle 'print $& if /\Ahello/' input.txt
输出:
hello
解释:\A 确保匹配从字符串的开头开始的“hello”,即使在多行模式下,它也不会受到行首的影响。
总结
这些零宽断言(\b、\B、\K、\z、\A)提供了强大的灵活性,帮助我们在不消费字符的情况下,精确地控制匹配的位置和边界。它们特别适用于匹配单词的边界、字符串的开始和结束、以及控制复杂的匹配场景。在处理复杂的文本匹配时,掌握这些零宽断言能够大大提高正则表达式的表达能力和匹配精度。
理解并合理使用这些零宽断言,可以帮助开发者解决很多实际问题,如精确匹配特定模式、处理字符串边界等。在实际应用中,这些技巧可以与环视等其他高级正则技术结合使用,进一步提升正则表达式的效果。
相关文章:
正则表达式进阶(二)——零宽断言详解:\b \B \K \z \A
在正则表达式中,零宽断言是一种非常强大的工具,能够在不消费字符的情况下对匹配位置进行约束。除了环视(lookahead 和 lookbehind)以外,还有一些常用的零宽断言,它们用于处理边界、字符串的开头和结尾等特殊…...
Android 中实现 PDF 预览三种方式
目录 1. 使用第三方库 PdfRenderer(适用于 Android 5.0 及以上) 步骤:2. 使用第三方库 MuPDF步骤:3. 使用第三方库 PdfiumAndroid步骤: 1. 使用第三方库 PdfRenderer(适用于 Android 5.0 及以上)…...
尚硅谷课程【笔记】——大数据之Zookeeper【二】
课程视频:【尚硅谷Zookeeper教程】 四、Zookeeper实战 4.1分布式安装部署 1. 集群规划 在Hadoop102、Hadoop103和Hadoop104三个节点上部署Zookeeper 2. 解压安装 1)解压Zookeeper.tar.gz到指定目录 tar -zxvf zookeeper-3.7.2.tar.gz -C /opt/mod…...
CodeGPT + IDEA + DeepSeek,在IDEA中引入DeepSeek实现AI智能开发
CodeGPT IDEA DeepSeek,在IDEA中引入DeepSeek 版本说明 建议和我使用相同版本,实测2022版IDEA无法获取到CodeGPT最新版插件。(在IDEA自带插件市场中搜不到,可以去官网搜索最新版本) ToolsVersionIntelliJ IDEA202…...
postgresql 游标(cursor)的使用
概述 PostgreSQL游标可以封装查询并对其中每一行记录进行单独处理。当我们想对大量结果集进行分批处理时可以使用游标,因为一次性处理可能造成内存溢出。 另外我们可以定义函数返回游标类型变量,这是函数返回大数据集的有效方式,函数调用者…...
计算机组成原理——指令系统(六)
在时间的长河中,我们都是追梦人,脚下的每一步都在刻画未来的模样。无论世界如何变幻,心中的那团火焰都不应熄灭。它是你突破黑暗、迎接黎明的力量源泉。每一个不曾起舞的日子,都是对生命的辜负;每一次跌倒后的站起&…...
Python设计模式 - 原型模式
定义 原型模式是一种创建型设计模式,它可以通过复制现有对象来创建新对象,而不是直接实例化新的对象。 结构 抽象原型(Prototype):声明 clone() 方法,以便派生类实现克隆自身的能力。具体原型(…...
金和OA C6 DownLoadBgImage任意文件读取漏洞
金和OA C6 DownLoadBgImage任意文件读取漏洞 漏洞描述 金和C6数据库是一款针对企业信息化管理而设计的高级数据库管理系统,主要应用于企业资源规划(ERP)、客户关系管理(CRM)以及办公自动化(OA)…...
【stm32学习】STM32F103实操primary(FlyMCU)
github插入图片实在是太难用了,暂时懒得学就先用CSDN吧hh 一、在设备管理器下,找到单片机,并检查与FlyMCU-搜索端口 显示的是否一致 二、在搜索串口右面的栏里选中该Port,波特率选中115200 三、选择文件夹中的.hex文件࿰…...
如何将Excel的表格存为图片?
emmm,不知道题主具体的应用场景是什么,就分享几个我一般会用到的场景下奖excel表格保存为图片的技巧吧! 先来个总结: 方法 适用场景 画质 操作难度 截图(WinShiftS) 快速保存表格,方便粘贴…...
51单片机之使用Keil uVision5创建工程以及使用stc-isp进行程序烧录步骤
一、Keil uVision5创建工程步骤 1.点击项目,新建 2.新建目录 3.选择目标机器,直接搜索at89c52选择,然后点击OK 4.是否添加起吊文件,一般选择否 5.再新建的项目工程中添加文件 6.选择C文件 7.在C文件中右键,添加…...
AUTOSAR面试题集锦(1)
最基础概念 什么是AUTOSAR?AUTOSAR到底做了什么? AUTOSAR,即汽车开放系统架构,是一套专门用于汽车的开放性的框架和行业标准,旨在标准化汽车开发的流程。 AUTOSAR 通过标准化软件接口、交换格式和方法论等内容,主要实现以下几个目标: 1. 使软件和硬件彼此独立,让应…...
【Uniapp-Vue3】从uniCloud中获取数据
需要先获取数据库对象: let db uniCloud.database(); 获取数据库中数据的方法: db.collection("数据表名称").get(); 所以就可以得到下面的这个模板: let 函数名 async () > { let res await db.collection("数据表名称…...
AIOS: 一个大模型驱动的Multi-Agent操作系统设计与Code分析
AIOS: 一个大模型驱动的Multi-Agent操作系统设计与Code分析 随着人工智能技术的快速发展,传统操作系统逐渐暴露出难以适应AI时代多样化需求的局限性。特别是在支持多个智能体协同工作方面存在显著不足。为此,我们提出了一种名为AIOS(Artifici…...
Python----Python高级(网络编程:网络基础:发展历程,IP地址,MAC地址,域名,端口,子网掩码,网关,URL,DHCP,交换机)
一、网络 早期的计算机程序都是在本机上运行的,数据存储和处理都在同一台机器上完成。随着技术的发展,人 们开始有了让计算机之间相互通信的需求。例如安装在个人计算机上的计算器或记事本应用,其运行环 境仅限于个人计算机内部。这种设置虽然…...
收集的面试资料
转载自:NLP_基于酒店评论的情感分析-CSDN博客 机器学习的一般过程 如何介绍项目: 项目背景:项目输入,输出,后续应用点 项目数据:数据来源 数据处理方法:是否有脏数据,如何处理脏数据…...
pytest-xdist 进行多进程并发测试!
在软件开发过程中,测试是确保代码质量和可靠性的关键步骤。随着项目规模的扩大和复杂性的增加,测试用例的执行效率变得尤为重要。为了加速测试过程,特别是对于一些可以并行执行的测试用 例,pytest-xdist 提供了一种强大的工具&…...
LVGL4种输入设备详解(触摸、键盘、实体按键、编码器)
lvgl有触摸、键盘、实体按键、编码器四种输入设备 先来分析一下这四种输入设备有什么区别 (1)LV_INDEV_TYPE_POINTER 主要用于触摸屏 用到哪个输入设备保留哪个其他的也是,保留触摸屏输入的任务注册,其它几种种输入任务的注册&…...
全流程安装DeepSeek开源模型
目录 配置要求安装Ollama选择大模型安装大模型对话备注 配置要求 我的电脑配置为: CPU:i7 12代 GPU:3080 内存:32g 磁盘:1T以上配置运行情况: 运行ollama run deepseek-r1:7b模型无压力,CPU/…...
人工智能领域-CNN 卷积神经网络 性能调优
在自动驾驶领域,对卷积神经网络(CNN)进行性能调优至关重要,以下从数据处理、模型架构、训练过程、超参数调整和模型部署优化等多个方面为你详细介绍调优方法,并给出相应的代码示例。 1. 数据处理 数据增强࿱…...
OpenClaw多模态飞书助手:Qwen3-VL:30B实战详解
OpenClaw多模态飞书助手:Qwen3-VL:30B实战详解 1. 为什么需要多模态飞书助手? 去年夏天,我负责一个跨部门协作项目时,每天要处理上百条飞书消息。最头疼的是同事发来的各种截图——有的是数据报表需要整理,有的是会议…...
3种方法让加密音乐重获自由:Unlock Music浏览器解密工具详解
3种方法让加密音乐重获自由:Unlock Music浏览器解密工具详解 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地址:…...
基于springboot的某学院勤工俭学岗位兼职平台设计与实现
目录 技术选型与架构设计核心功能模块划分数据库设计要点关键代码实现示例安全与权限控制测试与部署计划扩展性考虑 项目技术支持源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作 技术选型与架构设计 后端采用SpringBoot框架,集…...
比亚迪多款新车激光雷达性能超越华为:千线级感知开启智驾新纪元
2026年,中国智能驾驶行业正式进入“千线级激光雷达”时代。继华为发布896线双光路激光雷达后,比亚迪携速腾聚创EM4数字化激光雷达强势反击,以1080线物理扫描、600米最远探测的硬核参数,在核心感知硬件上实现对华为的全面超越。这一突破不仅标志着比亚迪补齐了智能化短板,更…...
LCDWIKI SPI图形库:嵌入式TFT-LCD驱动核心架构与实战
1. LCDWIKI SPI 图形库深度解析:面向嵌入式显示驱动的底层架构与工程实践LCDWIKI SPI Library 是一款专为基于 SPI 接口的 TFT-LCD 显示模块设计的轻量级、高兼容性图形驱动核心库。它并非孤立的显示驱动,而是整个 LCDWIKI 显示生态系统的“基石类”&…...
C++/Qt 使用 Tushare 获取股票信息
探索数据之源:使用tushare为Qt/C学习项目获取股票数据在进行金融量化分析或学习金融市场行为时,获取高质量、结构化的股票数据是至关重要的第一步。作为一个计划将Qt/C用于金融数据可视化或策略模拟的学习者,我近期深入体验了使用Python库tus…...
Eclipse Mraa多平台支持:从树莓派到Intel Joule的无缝移植教程
Eclipse Mraa多平台支持:从树莓派到Intel Joule的无缝移植教程 Eclipse Mraa是一款开源的嵌入式Linux库,专为简化Raspberry Pi、Intel Joule等嵌入式设备上的GPIO、I2C、SPI和UART等硬件接口访问而设计。通过统一的API和跨平台兼容性,开发者…...
如何突破Cursor试用限制?3种创新方案全解析
如何突破Cursor试用限制?3种创新方案全解析 【免费下载链接】go-cursor-help 解决Cursor在免费订阅期间出现以下提示的问题: Youve reached your trial request limit. / Too many free trial accounts used on this machine. Please upgrade to pro. We have this …...
DeepSeek LintCode 3867 · 范围内的数字计数 public int digitsCount(int d, int low, int high)
LintCode 3867 范围内的数字计数 问题分析 计算在区间 [low, high] 中,数字 d 出现的次数。 核心思想:使用数位DP或前缀和思想 • count(low, high) count(0, high) - count(0, low-1) 方法一:逐位统计法(推荐)AC pu…...
Dify向量检索精度跃升47%的秘密(重排序Pipeline低延迟部署避坑手册)
第一章:Dify重排序算法精度跃升47%的核心动因解析Dify v0.12.0 引入的重排序(Reranking)模块并非简单叠加模型,而是通过三重协同优化机制实现精度质变。核心突破在于将传统单阶段打分范式升级为「语义对齐—上下文感知—动态归一化…...
