当前位置:首页 > 科技  > 软件

正则表达式中 “$” 并不是表示 “字符串结束”

来源: 责编: 时间:2024-04-16 08:33:53 275观看
导读本文转载自微信公众号「 豌豆花下猫」,作者 Python猫 。这篇文章写一写我最近在用 Python 的正则表达式模块(re)开发 CPython 的 SBOM 工具时发现的一个令人惊讶的行为。如果用过正则表达式,你可能知道 ^ 表示 “字符串开

本文转载自微信公众号「 豌豆花下猫」,作者 Python猫 R6N28资讯网——每日最新资讯28at.com

这篇文章写一写我最近在用 Python 的正则表达式模块(re)开发 CPython 的 SBOM 工具时发现的一个令人惊讶的行为。R6N28资讯网——每日最新资讯28at.com

如果用过正则表达式,你可能知道 ^ 表示 “字符串开始”,并相应地将 $ 视为 “字符串结束”。因此认为, cat$ 模式会匹配字符串 "lolcat" ,但不会匹配 "internet cat video"。R6N28资讯网——每日最新资讯28at.com

^ 的行为让我认为 $ 也是类似的,但这并不一定成立,而且这种行为取决于不同编程语言及其写法。R6N28资讯网——每日最新资讯28at.com

特别是对于 Python 来说,如果禁用了多行模式(这是默认设置),那么,$ 字符不仅可以匹配字符串的末尾,还可以匹配字符串末尾的换行符。R6N28资讯网——每日最新资讯28at.com

所以,如果你试图匹配一个末尾没有换行符的字符串,在 Python 中使用 $ 是做不到的!我本以为禁用多行模式后,就不会有这种匹配换行符的行为,但事实恰恰相反。R6N28资讯网——每日最新资讯28at.com

下一个合乎逻辑的问题是,如何在 Python 中匹配一个末尾不含换行符的字符串?R6N28资讯网——每日最新资讯28at.com

在对 Python 和其它正则表达式语法进行多番研究后,我还发现了 /z 和 /Z 可以用于匹配 “字符串结束” 字符。R6N28资讯网——每日最新资讯28at.com

在 Python 中,可以用 re.MULTILINE 来启用多行模式,文档的描述如下:R6N28资讯网——每日最新资讯28at.com

当指定 re.MULTILINE 时,模式字符 '$' 会匹配字符串末尾以及每一行末尾(包含换行符)。默认情况下,'$' 只匹配字符串末尾以及字符串末尾的换行符之前(如果有的话)。R6N28资讯网——每日最新资讯28at.com

让我们看看这些特性在不同平台上是什么表现:R6N28资讯网——每日最新资讯28at.com

模式匹配 "cat/n"?
R6N28资讯网——每日最新资讯28at.com

"cat$" 多行模式
R6N28资讯网——每日最新资讯28at.com

"cat$" 无多行模式
R6N28资讯网——每日最新资讯28at.com

"cat/z"
R6N28资讯网——每日最新资讯28at.com

"cat/Z"
R6N28资讯网——每日最新资讯28at.com

PHP
R6N28资讯网——每日最新资讯28at.com


R6N28资讯网——每日最新资讯28at.com


R6N28资讯网——每日最新资讯28at.com


R6N28资讯网——每日最新资讯28at.com


R6N28资讯网——每日最新资讯28at.com

ECMAScript
R6N28资讯网——每日最新资讯28at.com


R6N28资讯网——每日最新资讯28at.com


R6N28资讯网——每日最新资讯28at.com

⚠️
R6N28资讯网——每日最新资讯28at.com

⚠️
R6N28资讯网——每日最新资讯28at.com

Python
R6N28资讯网——每日最新资讯28at.com


R6N28资讯网——每日最新资讯28at.com

R6N28资讯网——每日最新资讯28at.com

⚠️
R6N28资讯网——每日最新资讯28at.com


R6N28资讯网——每日最新资讯28at.com

Golang
R6N28资讯网——每日最新资讯28at.com


R6N28资讯网——每日最新资讯28at.com


R6N28资讯网——每日最新资讯28at.com


R6N28资讯网——每日最新资讯28at.com

⚠️
R6N28资讯网——每日最新资讯28at.com

Java 8
R6N28资讯网——每日最新资讯28at.com


R6N28资讯网——每日最新资讯28at.com


R6N28资讯网——每日最新资讯28at.com


R6N28资讯网——每日最新资讯28at.com


R6N28资讯网——每日最新资讯28at.com

.NET 7.0
R6N28资讯网——每日最新资讯28at.com


R6N28资讯网——每日最新资讯28at.com


R6N28资讯网——每日最新资讯28at.com


R6N28资讯网——每日最新资讯28at.com


R6N28资讯网——每日最新资讯28at.com

Rust
R6N28资讯网——每日最新资讯28at.com


R6N28资讯网——每日最新资讯28at.com


R6N28资讯网——每日最新资讯28at.com


R6N28资讯网——每日最新资讯28at.com

⚠️
R6N28资讯网——每日最新资讯28at.com

  • ✅: 模式与字符串 "cat/n" 匹配
  • ❌: 模式与字符串 "cat/n" 不匹配
  • ⚠️: 模式无效或不支持该用法

综合上述表格,如果要匹配换行符,那么在所有语言中使用多行模式的 $ ,都能匹配成功;但如果不想匹配换行符,事情就会变得复杂起来。R6N28资讯网——每日最新资讯28at.com

如果不想匹配换行符,在除了 Python 和 ECMAScript 外的其它语言中,你可以使用 /z。而在 Python 中,你需要使用 /Z ,在 ECMAScript 中使用非多行模式的 $。R6N28资讯网——每日最新资讯28at.com

今天这些关于正则表达式的知识,你学会了么?R6N28资讯网——每日最新资讯28at.com

注意:上述数据表的信息收集自 regex101.com,我没有用实际的编程环境进行测试。R6N28资讯网——每日最新资讯28at.com

作者:Seth LarsonR6N28资讯网——每日最新资讯28at.com

译者:豌豆花下猫@Python猫R6N28资讯网——每日最新资讯28at.com

英文:Regex character “$” doesn't mean “end-of-string”R6N28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-83786-0.html正则表达式中 “$” 并不是表示 “字符串结束”

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 通过JS获取你当前的网络状况?建议大家学一学~

下一篇: 设计模式之代理模式:为对象提供一个“替身”

标签:
  • 热门焦点
  • 一文看懂为苹果Vision Pro开发应用程序

    译者 | 布加迪审校 | 重楼苹果的Vision Pro是一款混合现实(MR)头戴设备。Vision Pro结合了虚拟现实(VR)和增强现实(AR)的沉浸感。其高分辨率显示屏、先进的传感器和强大的处理能力
  • Golang 中的 io 包详解:组合接口

    io.ReadWriter// ReadWriter is the interface that groups the basic Read and Write methods.type ReadWriter interface { Reader Writer}是对Reader和Writer接口的组合,
  • 多线程开发带来的问题与解决方法

    使用多线程主要会带来以下几个问题:(一)线程安全问题  线程安全问题指的是在某一线程从开始访问到结束访问某一数据期间,该数据被其他的线程所修改,那么对于当前线程而言,该线程
  • 使用LLM插件从命令行访问Llama 2

    最近的一个大新闻是Meta AI推出了新的开源授权的大型语言模型Llama 2。这是一项非常重要的进展:Llama 2可免费用于研究和商业用途。(几小时前,swyy发现它已从LLaMA 2更名为Lla
  • 拼多多APP上线本地生活入口,群雄逐鹿万亿市场

    Tech星球(微信ID:tech618)文 | 陈桥辉 Tech星球独家获悉,拼多多在其APP内上线了“本地生活”入口,位置较深,位于首页的“充值中心”内,目前主要售卖美食相关的
  • 中国家电海外掘金正当时|出海专题

    作者|吴南南编辑|胡展嘉运营|陈佳慧出品|零态LT(ID:LingTai_LT)2023年,出海市场战况空前,中国创业者在海外纷纷摩拳擦掌,以期能够把中国的商业模式、创业理念、战略打法输出海外,他们依
  • 华为Mate 60系列用上可变灵动岛:正式版体验将会更出色

    这段时间以来,关于华为新旗舰的爆料日渐密集。据此前多方爆料,今年华为将开始恢复一年双旗舰战略,除上半年推出的P60系列外,往年下半年的Mate系列也将
  • 微软发布Windows 11新版 引入全新任务栏状态

    近日,微软发布了Windows 11新版,而Build 22563更新主要引入了几周前曝光的平板模式任务栏等,系统更流畅了。更新中,Windows 11加入了专门针对平板优化的任务栏
  • 由于成本持续增加,笔记本产品价格预计将明显上涨

    根据知情人士透露,由于材料、物流等成本持续增加,笔记本产品价格预计将在2021年下半年有明显上涨。进入6月下旬以来,全球半导体芯片缺货情况加剧,显卡、处理器
Top