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

正則表達(dá)式雜記:入門筆記速查,進(jìn)階:組屬性,Vim Magic 與練習(xí)場地

開發(fā) 前端
幾乎所有寫代碼的朋友都或多或少接觸過一點(diǎn) regex ,但你真的會用嗎?比如,用于全匹配 aabc 的 regex 為 ^(?.)\k(?!\k)(?.)(?!\k(b)|\k).$ ,你可以給出解釋嗎?

 [[407608]]

本文轉(zhuǎn)載自微信公眾號「Piper蛋窩」,作者Piper蛋 。轉(zhuǎn)載本文請聯(lián)系Piper蛋窩公眾號。

幾乎所有寫代碼的朋友都或多或少接觸過一點(diǎn) regex ,但你真的會用嗎?比如,用于全匹配 aabc 的 regex 為 ^(?.)\k(?!\k)(?.)(?!\k(b)|\k).$ ,你可以給出解釋嗎?今天,不妨一起回顧一下 regex 中的知識;此外,筆者將分享一些拓展內(nèi)容,比如 vim 中的 magic 、練習(xí) regex 的絕佳在線工具等。

入門筆記速查

本段及下段內(nèi)容是 B站UP主free-coder 視頻正則表達(dá)式-從入門到group入門[1]的筆記。閱讀原文可以觀看其視頻。強(qiáng)烈安利這位技術(shù)UP。

基礎(chǔ)內(nèi)容

對于字符串a(chǎn)bc,我們輸入正則表達(dá)式:

  • abc,可以匹配到出現(xiàn)在任意位置的abc
  • ^abc$, 全匹配 ,^a表示這個字符串開頭必須是a,c$表示這個字符串結(jié)尾必須是c

此外,我們可以用 中括號 []某個范圍的匹配,比如:

  • [a-z]表示匹配任意位置的某個字符,這個字符的范圍是a,b,c,...,z
  • [a-zA-Z]表示匹配任意位置的某個字符,這個字符的范圍是a,b,c,...,z,A,B,C,...,Z

而在中括號[]內(nèi),^表示取反,如,^[^a-z]$表示:全匹配一個字符,這個字符不屬于a,b,c,...,z

而 大括號 表示字符的數(shù)量,如:

  • ^[a-zA-Z]{3}$表示,全匹配一個字符串,這個字符串有3個字符,每個字符都屬于a,b,c,...,z,A,B,C,...,Z
  • ^[a-zA-Z]{3,}$表示,全匹配一個字符串,這個字符串 至少 有3個字符,每個字符都屬于a,b,c,...,z,A,B,C,...,Z
  • ^[a-zA-Z]{3,6}$表示,全匹配一個字符串,這個字符串 至少 有3個字符, 至多 有6個字符,每個字符都屬于a,b,c,...,z,A,B,C,...,Z

其他符號

如.表示 除了 回車/換行符號 line terminators 。

符號 . 匹配到兩個字符串,被換行隔開

而 \d 與 [0-9] 同, \D 與 [^0-9] 同。我們一般用 [\d\D] 表示任意字符, 包括 回車/換行符號 line terminators 。

符號 [\d\D] 匹配到一個字符串,不會受換行影響

\w 是常用互聯(lián)網(wǎng)命名符號,與 [a-zA-Z0-9_] 同。

\s 是特殊符號,與 [\r\n\t\f\v ] 同,\S 是非特殊符號 [^\r\n\t\f\v ] 。

此外,還有表示數(shù)量的符號:

  • w? 同 {0,1}
  • w* 同 {0,}
  • w+ 同 {1,}

舉例:匹配 qq 郵箱

以我的郵箱 piperliu@qq.com 為例:

  • ^[a-zA-Z0-9]\w*第一個字符不能是下劃線
  • 后面是@qq\.com$,其中,\.表示字符“.”,\是轉(zhuǎn)義符號。

用 JavaScript 匹配:

  1. 'piperliu@qq.com'.match(/^[a-zA-Z0-9]\w*@qq\.com$/) 

其中,字符串對象的match()函數(shù)中用//包裹正則表達(dá)式。

進(jìn)階:組屬性

組屬性很神奇,有了組屬性,我們可以表達(dá)更復(fù)雜的語法規(guī)則。

組基礎(chǔ)

我們用括號()定義哪些部分是一個組。

  1. 'piperliu@qq.com'.match(/^([a-zA-Z0-9]\w*)@qq\.com$/) 

其中,我們將piperliu即([a-zA-Z0-9]\w*)定義為一個組,且是第1個組。

但是組([a-zA-Z0-9]\w*)并不在 JavaScript 對象的組對象 groups 中

如上,在 JavaScript 對象的組對象 groups 中,并沒有我們剛剛定義的組。這是因?yàn)?groups 中只存放定義了名稱的組。我們用 ? 定義組的名稱。

  1. 'piperliu@qq.com'.match(/^(?<first>[a-zA-Z0-9]\w*)@qq\.com$/) 

組([a-zA-Z0-9]\w*)在 JavaScript 對象的組對象 groups 中

如上,我們定義組名稱為first。

組實(shí)現(xiàn)引用

在同一個正則表達(dá)式中,我們可以直接用索引引用組(\1),也可以用名字引用定義了組名的組(\k)。

組的索引是從 1 開始的,而非 0 , 因?yàn)閈0已經(jīng)被用來表示asc碼的第一個碼。

對于字符串1212,我們可以用如下的方式匹配:

  • ^\d\d\d\d$
  • ^(\d\d)\1$,引用第一組
  • ^?(\d\d)\k$,直接用了組名

組的特殊結(jié)構(gòu)

有了組,我們可以實(shí)現(xiàn)很多 Group Construction ,首先以 Positive Lookahead 為例。

對于字符串foobar,fooboo為例,我們想找出foo,且這個foo必須緊緊靠在bar前,則可表達(dá)如下:

  • foo(?=bar)

再舉個例子, Positive Lookbehind 和 Negative Lookbehind ,對于字符串barfoo,boofoo,我們想找出foo:

  • 這個foo必須緊緊靠在bar后,則(?<=bar)foo
  • 這個foo前緊鄰的必須不是bar,則(?!=bar)foo

老師例題

現(xiàn)在想匹配字符串形式aabc,要注意不可以匹配到:

  • aaaa
  • aabb
  • aaba

則正則表達(dá)式如下:

  1. ^(?<a>.)\k<a>(?!\k<a>)(?<b>.)(?!\k<b>|\k<a>).$ 

正確的匹配

分析一下:

  • ^(?.)第一個字符,定義為組a,可以是任何字符.
  • \k第二個字符要與第一個字符同
  • (?!\k)此外,第二個字符緊后面的字符,不可以是組a的字符
  • (?.)第三個字符定義為組b
  • (?!\k|\k)此外,第二個字符緊后面的字符,不可以是組b或組a的字符
  • .第四個字符任意

vim magic

在上古神器 vim 中,我習(xí)慣 使用類似正則的思想,進(jìn)行批量注釋 (其實(shí)是 VS Code 中 vim 插件,塊快捷鍵 Ctrl+v 與粘貼鍵有沖突),如下圖(編輯模式下:2,3s/^/#/g)。

在第2、3行前加如#,思路是:將開頭符號^替換為#

而對于 vim 來講,在使用 / 正則查找時,分為兩個模式:

  • magic 模式
  • nomagic 模式

對于 magic 模式,我們的特殊符號如 . 就是特殊含義(任何字符),即正常的正則表達(dá)模式;對于 nomagic 模式,我們的符號都只表達(dá)符號本身,使用特殊含義需要用 \ 轉(zhuǎn)義。

:set magic

:set nomagic

閱讀原文:https://www.bilibili.com/video/BV1Rf4y1X7R8

 

責(zé)任編輯:武曉燕 來源: Piper蛋窩
相關(guān)推薦

2009-09-16 18:19:34

正則表達(dá)式組

2009-02-18 09:48:20

正則表達(dá)式Java教程

2019-12-10 10:40:57

Python正則表達(dá)式編程語言

2010-03-01 15:51:59

Python則表達(dá)式

2009-08-17 13:56:28

C#正則表達(dá)式入門

2019-11-29 16:25:00

前端正則表達(dá)式字符串

2024-12-16 07:33:45

C#正則表達(dá)式

2010-07-22 09:12:05

Perl正則表達(dá)式

2009-08-20 13:44:07

C#正則表達(dá)式

2020-09-04 09:16:04

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

2018-09-27 15:25:08

正則表達(dá)式前端

2009-08-11 13:00:41

C#正則表達(dá)式

2009-08-13 15:24:27

C#正則表達(dá)式

2024-09-14 09:18:14

Python正則表達(dá)式

2010-02-24 17:13:47

2016-12-28 11:20:31

Pythonre模塊

2015-04-16 11:16:05

PHPPOSIX正則表達(dá)式

2010-07-13 16:56:30

Perl正則表達(dá)式

2022-03-28 06:19:14

正則表達(dá)式開發(fā)

2019-07-17 15:45:47

正則表達(dá)式字符串前端
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 久在线观看 | 黄色精品视频网站 | 色天堂视频 | 伊人焦久影院 | 日本久久www成人免 成人久久久久 | 欧美中文在线 | 免费黄色a级毛片 | 在线不卡 | 久久久久久久久久久爱 | 成人在线免费看 | 最新一级毛片 | 精精国产视频 | 久久久性 | 亚洲高清av在线 | 欧美男人天堂 | 亚洲精品一区二区三区中文字幕 | 欧美日韩亚洲在线 | 久久一及片 | 三级视频久久 | 久久午夜视频 | 精品乱码一区二区三四区视频 | 国产福利免费视频 | 久久亚洲国产 | 99精品视频免费在线观看 | 国产日韩视频 | 亚洲精品国产精品国自产在线 | 欧美一区二区免费电影 | 亚洲一区中文字幕在线观看 | 国产日韩免费视频 | 久久精品视频一区二区 | 玩丰满女领导对白露脸hd | 91夜夜夜 | 免费国产一区二区 | 美女久久视频 | 亚洲精品一区中文字幕乱码 | 国产在线精品一区二区三区 | 天天天插 | 国产精品免费观看视频 | 91麻豆精品国产91久久久更新资源速度超快 | 91久久爽久久爽爽久久片 | 怡红院免费的全部视频 |