成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

正則表達(dá)式中 “$” 并不是表示 “字符串結(jié)束”

開(kāi)發(fā) 前端
如果不想匹配換行符,在除了 Python 和 ECMAScript 外的其它語(yǔ)言中,你可以使用 \z?。而在 Python 中,你需要使用 ?\Z? ,在 ECMAScript 中使用非多行模式的 ?$。

本文轉(zhuǎn)載自微信公眾號(hào)「 豌豆花下貓」,作者 Python貓 

這篇文章寫(xiě)一寫(xiě)我最近在用 Python 的正則表達(dá)式模塊(re)開(kāi)發(fā) CPython 的 SBOM 工具時(shí)發(fā)現(xiàn)的一個(gè)令人驚訝的行為。

如果用過(guò)正則表達(dá)式,你可能知道 ^ 表示 “字符串開(kāi)始”,并相應(yīng)地將 $ 視為 “字符串結(jié)束”。因此認(rèn)為, cat$ 模式會(huì)匹配字符串 "lolcat" ,但不會(huì)匹配 "internet cat video"。

^ 的行為讓我認(rèn)為 $ 也是類(lèi)似的,但這并不一定成立,而且這種行為取決于不同編程語(yǔ)言及其寫(xiě)法。

特別是對(duì)于 Python 來(lái)說(shuō),如果禁用了多行模式(這是默認(rèn)設(shè)置),那么,$ 字符不僅可以匹配字符串的末尾,還可以匹配字符串末尾的換行符。

所以,如果你試圖匹配一個(gè)末尾沒(méi)有換行符的字符串,在 Python 中使用 $ 是做不到的!我本以為禁用多行模式后,就不會(huì)有這種匹配換行符的行為,但事實(shí)恰恰相反。

下一個(gè)合乎邏輯的問(wèn)題是,如何在 Python 中匹配一個(gè)末尾不含換行符的字符串?

在對(duì) Python 和其它正則表達(dá)式語(yǔ)法進(jìn)行多番研究后,我還發(fā)現(xiàn)了 \z 和 \Z 可以用于匹配 “字符串結(jié)束” 字符。

在 Python 中,可以用 re.MULTILINE 來(lái)啟用多行模式,文檔的描述如下:

當(dāng)指定 re.MULTILINE 時(shí),模式字符 '$' 會(huì)匹配字符串末尾以及每一行末尾(包含換行符)。默認(rèn)情況下,'$' 只匹配字符串末尾以及字符串末尾的換行符之前(如果有的話)。

讓我們看看這些特性在不同平臺(tái)上是什么表現(xiàn):

模式匹配 "cat\n"?

"cat$" 多行模式

"cat$" 無(wú)多行模式

"cat\z"

"cat\Z"

PHP

?

?

?

?

ECMAScript

?

?

??

??

Python

?

?

??

?

Golang

?

?

?

??

Java 8

?

?

?

?

.NET 7.0

?

?

?

?

Rust

?

?

?

??

  • ?: 模式與字符串 "cat\n" 匹配
  • ?: 模式與字符串 "cat\n" 不匹配
  • ??: 模式無(wú)效或不支持該用法

綜合上述表格,如果要匹配換行符,那么在所有語(yǔ)言中使用多行模式的 $ ,都能匹配成功;但如果不想匹配換行符,事情就會(huì)變得復(fù)雜起來(lái)。

如果不想匹配換行符,在除了 Python 和 ECMAScript 外的其它語(yǔ)言中,你可以使用 \z。而在 Python 中,你需要使用 \Z ,在 ECMAScript 中使用非多行模式的 $。

今天這些關(guān)于正則表達(dá)式的知識(shí),你學(xué)會(huì)了么?

注意:上述數(shù)據(jù)表的信息收集自 regex101.com,我沒(méi)有用實(shí)際的編程環(huán)境進(jìn)行測(cè)試。

作者:Seth Larson

譯者:豌豆花下貓@Python貓

英文:Regex character “$” doesn't mean “end-of-string”

責(zé)任編輯:武曉燕 來(lái)源: Python貓
相關(guān)推薦

2009-09-16 17:02:15

正則表達(dá)式匹配字符串

2024-09-30 11:16:39

C#正則表達(dá)式

2009-08-20 14:31:55

C#正則表達(dá)式字符串

2009-09-16 17:54:31

正則表達(dá)式實(shí)現(xiàn)

2009-08-14 17:44:46

C#中使用正則表達(dá)式匹

2010-03-15 16:13:11

Python正則表達(dá)式

2016-12-28 11:20:31

Pythonre模塊

2009-04-22 15:06:16

正則表達(dá)式PHP特殊字符

2010-03-22 18:20:47

Python正則表達(dá)式

2020-09-04 09:16:04

Python正則表達(dá)式虛擬機(jī)

2018-09-27 15:25:08

正則表達(dá)式前端

2009-09-16 11:17:12

PHP正則表達(dá)式定位字

2009-09-16 17:25:53

正則表達(dá)式字符集

2010-08-09 14:07:04

Flex正則表達(dá)式

2009-09-16 10:59:24

PHP正則表達(dá)式元字符

2009-11-27 09:05:50

PHP函數(shù)split(

2024-09-14 09:18:14

Python正則表達(dá)式

2010-08-09 13:51:27

Flex正則表達(dá)式

2009-06-15 17:24:59

Groovy正則表達(dá)式

2010-03-15 16:21:28

Python正則表達(dá)式
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产成人99久久亚洲综合精品 | 一级在线毛片 | 一区二区三区av | 亚洲精品一区二区三区免 | 一区二区中文字幕 | 中文字幕免费 | 在线免费观看一区二区 | 毛片a级 | 久久久人成影片一区二区三区 | 精品综合久久 | 久久久91精品国产一区二区三区 | 天天色综 | 99国内精品| av网站在线免费观看 | 午夜寂寞福利视频 | 91免费在线播放 | 一级在线观看 | 亚洲精品国产一区 | 午夜视频网站 | 91久久视频 | 毛片久久久 | 一区二区三区福利视频 | 久久成人精品 | 99精品视频在线 | 日韩精品1区2区3区 成人黄页在线观看 | 色婷婷一区二区三区四区 | 亚洲永久| 国产一区免费 | 91网站在线观看视频 | 欧美激情精品久久久久久免费 | 自拍视频网站 | 国产真实乱对白精彩久久小说 | 草久久久 | 国产毛片久久久 | 久久免费精品 | 欧美精品福利视频 | 久久激情视频 | 在线亚洲一区二区 | 国产综合久久 | 888久久久| av看片网站|