正则表达式进阶(二)——零宽断言详解:\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)提供了强大的灵活性,帮助我们在不消费字符的情况下,精确地控制匹配的位置和边界。它们特别适用于匹配单词的边界、字符串的开始和结束、以及控制复杂的匹配场景。在处理复杂的文本匹配时,掌握这些零宽断言能够大大提高正则表达式的表达能力和匹配精度。

理解并合理使用这些零宽断言,可以帮助开发者解决很多实际问题,如精确匹配特定模式、处理字符串边界等。在实际应用中,这些技巧可以与环视等其他高级正则技术结合使用,进一步提升正则表达式的效果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/14579.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年日祭

本文将同步发表于洛谷(暂无法访问)、CSDN 与 Github 个人博客(暂未发布) 本蒟自2025.2.8开始半停课。 任务计划(站外题与专题) 数了一下,通过人数比较高的题,也就是我准备补的题&a…

UIAbility 生命周期方法

生命周期流程图 UIAbility的生命周期官方文档地址https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V13/uiability-lifecycle-V13 1. onCreate(want: Want, launchParam: LaunchParam) 触发时机:Ability首次创建时 作用:初始化核心资源…

模型 冗余系统(系统科学)

系列文章分享模型,了解更多👉 模型_思维模型目录。为防故障、保运行的备份机制。 1 冗余系统的应用 1.1 冗余系统在企业管理中的应用-金融行业信息安全的二倍冗余技术 在金融行业,信息安全是保障业务连续性和客户资产安全的关键。随着数字化…

【大数据技术】Spark分布式实现词频统计(hadoop+python+spark)

Spark分布式实现词频统计(hadooppythonspark) 搭建完全分布式高可用大数据集群(VMwareCentOSFinalShell) 搭建完全分布式高可用大数据集群(HadoopMapReduceYarn) 本机PyCharm远程连接CentOS虚拟机&#x…

28.<Spring博客系统⑤(部署的整个过程(CentOS))>

引入依赖 Spring-boot-maven-plugin 用maven进行打包的时候必须用到这个插件。看看自己pom.xml中有没有这个插件 并且看看配置正确不正常。 注&#xff1a;我们这个项目打的jar包在30MB左右。 <plugin><groupId>org.springframework.boot</groupId><artif…

C++Primer学习(2.2)

2.2 变量 变量提供一个具名的、可供程序操作的存储空间。C中的每个变量都有其数据类型,数据类型决定着变量所占内存空间的大小和布局方式、该空间能存储的值的范围&#xff0c;以及变量能参与的运算。对C程序员来说,“变量(variable)”和“对象(object)”一般可以互换使用。 术…

电脑开机提示按f1原因分析及终极解决方法来了

经常有网友问到一个问题&#xff0c;我电脑开机后提示按f1怎么解决&#xff1f;不管理是台式电脑&#xff0c;还是笔记本&#xff0c;都有可能会遇到开机需要按F1&#xff0c;才能进入系统的问题&#xff0c;引起这个问题的原因比较多&#xff0c;今天小编在这里给大家列举了比…

Linux系统命令无法使用(glib库相关问题)

1.背景描述 Yum强制安装了一些软件&#xff0c;安装软件成功无报错&#xff0c;完成后不久突然发现系统出问题了&#xff0c;所有的命令无法使用了&#xff0c;如ls、mv、cat等基本命令报错。 relocation error&#xff1a; /lib64/libpthread.so.0: symbol_libc_dl_error_tsd …

Jupyter Notebook自动保存失败等问题的解决

一、未生成配置文件 需要在命令行中&#xff0c;执行下面的命令自动生成配置文件 jupyter notebook --generate-config 执行后会在 C:\Users\用户名\.jupyter目录中生成文件 jupyter_notebook_config.py 二、在网页端打开Jupyter Notebook后文件保存失败&#xff1b;运行代码…

【含文档+PPT+源码】基于Python校园跑腿管理系统设计与实现

项目介绍 本课程演示的是一款基于Python校园跑腿管理系统设计与实现&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Python学习者。 1.包含&#xff1a;项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本套系统 3.…

TypeScript 中的联合类型:灵活的类型系统

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

WebStorm设置Vue Component模板

下载vue.js插件 下面有模板样例 Composition API&#xff1a;这是 Vue 3 的一项新特性&#xff0c;允许通过 setup 函数来组织组件逻辑。Options API&#xff1a;这是 Vue 2 和 Vue 3 都支持的传统方式&#xff0c;通过定义组件的 data、methods、computed 等来组织逻辑。 Comp…

解锁AI语音魅力——yoyo鹿鸣在线语音合成器,让创意声音即刻绽放!

yoyo鹿鸣-在线语音合成 人工智能语音克隆生成&#xff0c;二次元&#xff5e; AI工具 | AI探金 可以在AI探金社区来找我&#xff5e; yoyo鹿鸣 - 在线语音生成器 需求人群&#xff1a; 有语音合成需求的用户。 使用场景示例&#xff1a; 合成yoyo鹿鸣语音 等等 产品特色&a…

基于STM32的智能鱼缸水质净化系统设计

&#x1f91e;&#x1f91e;大家好&#xff0c;这里是5132单片机毕设设计项目分享&#xff0c;今天给大家分享的是智能鱼缸水质净化系统。 目录 1、设计要求 2、系统功能 3、演示视频和实物 4、系统设计框图 5、软件设计流程图 6、原理图 7、主程序 8、总结 1、设计要求…

t113-qt

修改QT配置: # # qmake configuration for building with arm-linux-gnueabi-g ## MAKEFILE_GENERATOR UNIX # CONFIG incremental # QMAKE_INCREMENTAL_STYLE sublib# include(../common/linux.conf) # include(../common/gcc-base-unix.conf) # inc…

apisix的real-ip插件使用说明

k8s集群入口一般都需要过负载均衡&#xff0c;然后再到apisix。 这时候如果后台业务需要获取客户端ip&#xff0c;可能拿到的是lb或者网关的内网ip。 这里一般要获取真实ip需要做几个处理。 1. 负载均衡上&#xff0c;一般支持配置获取真实ip参数&#xff0c;需要配置上。然…

[Meet DeepSeek] 如何顺畅使用DeepSeek?告别【服务器繁忙,请稍后再试。】

文章目录 [Meet DeepSeek] 如何顺畅使用DeepSeek&#xff1f;告别【服务器繁忙&#xff0c;请稍后再试。】引言使用渠道一&#xff1a;硅基流动 Chatbox AI【推荐】硅基流动 Chatbox AI的优势 使用渠道二&#xff1a;秘塔AI搜索秘塔AI搜索的优势 其它方案1. DeepSeek官网2. 纳…

四模型消融实验!DCS-CNN-BiLSTM-Attention系列四模型多变量时序预测

四模型消融实验&#xff01;DCS-CNN-BiLSTM-Attention系列四模型多变量时序预测 目录 四模型消融实验&#xff01;DCS-CNN-BiLSTM-Attention系列四模型多变量时序预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 基于DCS-CNN-BiLSTM-Attention、CNN-BiLSTM-Attention…

索引(MySQL)

1. 没有索引&#xff0c;可能会有什么问题 索引&#xff1a;提高数据库的性能&#xff0c;索引是物美价廉的东西了。不用加内存&#xff0c;不用改程序&#xff0c;不用调sql&#xff0c;只要执行 正确的 create index &#xff0c;查询速度就可能提高成百上千倍。但是天下没有…

Windows 实用设置工具 v3.6.5:一键优化系统设置

这款 Windows 实用设置工具 v3.6.5 是一款功能强大的系统优化软件&#xff0c;由 kernel 开发。它提供了丰富的系统设置选项&#xff0c;帮助用户轻松管理和优化 Windows 系统。以下是该工具的主要功能和特点&#xff1a; 主要功能 隐藏电脑文件夹 视频、文档、图片、音乐、下…