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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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


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


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


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

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


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


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

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

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

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


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

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

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


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

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


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


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


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

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

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


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


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


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


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

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


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


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


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


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

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


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


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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

标签:
  • 热门焦点
  • 官方承诺:K60至尊版将会首批升级MIUI 15

    官方承诺:K60至尊版将会首批升级MIUI 15

    全新的MIUI 15今天也有了消息,在官宣了K60至尊版将会搭载天玑9200+处理器和独显芯片X7的同时,Redmi给出了官方承诺,K60至尊重大更新首批升级,会首批推送MIUI 15。也就是说虽然
  • 2023年Q2用户偏好榜:12+256G版本成新主流

    2023年Q2用户偏好榜:12+256G版本成新主流

    3月份的性能榜、性价比榜和好评榜之后,就要轮到2023年的第二季度偏好榜了,上半年的新机潮已经过去,最明显的肯定就是大内存和存储的机型了,另外部分中端机也取消了屏幕塑料支架
  • 5月iOS设备好评榜:iPhone 14仅排第43?

    5月iOS设备好评榜:iPhone 14仅排第43?

    来到新的一月,安兔兔的各个榜单又重新汇总了数据,像安卓阵营的榜单都有着比较大的变动,不过iOS由于设备的更新换代并没有那么快,所以相对来说变化并不大,特别是iOS好评榜,老款设
  • Raft算法:保障分布式系统共识的稳健之道

    Raft算法:保障分布式系统共识的稳健之道

    1. 什么是Raft算法?Raft 是英文”Reliable、Replicated、Redundant、And Fault-Tolerant”(“可靠、可复制、可冗余、可容错”)的首字母缩写。Raft算法是一种用于在分布式系统
  • 一文搞定Java NIO,以及各种奇葩流

    一文搞定Java NIO,以及各种奇葩流

    大家好,我是哪吒。很多朋友问我,如何才能学好IO流,对各种流的概念,云里雾里的,不求甚解。用到的时候,现百度,功能虽然实现了,但是为什么用这个?不知道。更别说效率问题了~下次再遇到,
  • Temu起诉SHEIN,跨境电商战事升级

    Temu起诉SHEIN,跨境电商战事升级

    来源 | 伯虎财经(bohuFN)作者 | 陈平安日前据外媒报道,拼多多旗下跨境电商平台Temu正对竞争对手SHEIN提起新诉讼,诉状称Shein“利用市场支配力量强迫服装厂商与之签订独家
  • 拼多多APP上线本地生活入口,群雄逐鹿万亿市场

    拼多多APP上线本地生活入口,群雄逐鹿万亿市场

    Tech星球(微信ID:tech618)文 | 陈桥辉 Tech星球独家获悉,拼多多在其APP内上线了“本地生活”入口,位置较深,位于首页的“充值中心”内,目前主要售卖美食相关的
  • 一条抖音4亿人围观 ! 这家MCN比无忧传媒还野

    一条抖音4亿人围观 ! 这家MCN比无忧传媒还野

    作者:Hiu 来源:互联网品牌官01 擦边少女空降热搜,幕后推手曝光被网友誉为“纯欲天花板”的女网红井川里予,近期因为一组哥特风照片登上热搜,引发了一场互联网世界关于
  • 外交部:美方应停止在网络安全问题上不负责任地指责他国

    外交部:美方应停止在网络安全问题上不负责任地指责他国

      中国外交部今天(16日)举行例行记者会。会上,有记者问,美国情报官员称,他们正在阻拦来自中国以及其他国家的黑客获取相关科研成果。 中方对此有何评论?对此
Top