成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

原來(lái)正則表達(dá)式這么簡(jiǎn)單

entner / 1981人閱讀

摘要:開(kāi)始一個(gè)完整的正則表達(dá)式通常由兩部分組成普通的字符不普通的元字符。元字符匹配正則表達(dá)式中有著豐富的元字符提供,這里我們選擇常用的進(jìn)行具體講解。

作為一個(gè)程序員,我們?cè)谌粘5拈_(kāi)發(fā)過(guò)程中需要對(duì)一些文本內(nèi)容進(jìn)行快速查找匹配以及內(nèi)容替換等操作,而我們最常用的方法就是通過(guò)正則表達(dá)式來(lái)實(shí)現(xiàn)。什么是正則表達(dá)式呢?我們可以理解為是一種專(zhuān)門(mén)處理文字的工具,通過(guò)制定規(guī)則來(lái)匹配文字的位置或者內(nèi)容,對(duì)結(jié)果進(jìn)行操作。

開(kāi)始

一個(gè)完整的正則表達(dá)式通常由兩部分組成普通的字符、不普通的元字符。普通字符很好理解指的就是26個(gè)英文字母大小寫(xiě)a(A)~z(Z)和數(shù)字0~9,不普通的元字符從字面上可以看出點(diǎn)特殊,元字符其實(shí)就是指具備一些特殊含義的字符 例如 ".*?+^$"等,那么字符和元字符可以互轉(zhuǎn)嘛?答案是可以的,神奇的元字符反斜杠""也可以實(shí)現(xiàn)這個(gè)功能,客官別不信,我們接著看~~

字符匹配

在正則表達(dá)式中我們可以通過(guò)普通的字母和數(shù)字組成最基本的匹配規(guī)則,對(duì)內(nèi)容進(jìn)行一一對(duì)應(yīng),例如 我們現(xiàn)在想在"hello,world!"中找到"hello",我們通過(guò) /hello/ 正則表達(dá)式就可以了。

但單單只通過(guò)普通字符匹配往往是不能滿(mǎn)足我們的需求的,例如 現(xiàn)在有一段內(nèi)容"***分割線***",我們希望把內(nèi)容中的""替換成"-",可""是元字符具有特殊含義,因此這個(gè)時(shí)候指通過(guò)普通字符是無(wú)法實(shí)現(xiàn)的,但通過(guò)轉(zhuǎn)義字符就可以實(shí)現(xiàn),后面我們會(huì)講到。

元字符匹配

正則表達(dá)式中有著豐富的元字符提供,這里我們選擇常用的進(jìn)行具體講解。

多字符匹配

在字符匹配章節(jié)我們舉例從"hello,world!"中找到"hello",我們通過(guò)一一對(duì)應(yīng)的方式篩選對(duì)應(yīng)的字符,但在實(shí)際場(chǎng)景中我們經(jīng)常會(huì)遇到一對(duì)多的情況,例如"hello,xx!","xx"對(duì)應(yīng)的可能是"world"也可能是任意其他字符,這個(gè)時(shí)候我們通過(guò)單字符匹配的話(huà)顯然很低效,如果能有一種模式涵蓋表示這類(lèi)字符豈不快哉,各位看官,現(xiàn)在我們推出第一個(gè)元字符,代表集合含義的[],集合顧名思義就是某一類(lèi)的合,現(xiàn)在我們對(duì)正則進(jìn)行改寫(xiě)即 /hello,[abc]/ ,這時(shí)候我們可以同時(shí)匹配a,b,c三個(gè)字符,但這種寫(xiě)法依然很低效,我們需要一個(gè)能表示區(qū)間的字符,區(qū)間元字符 - 正合適,這時(shí)候我們可以寫(xiě)成 /hello,[a-z]/ ,這時(shí)候我們就可以匹配所有26個(gè)小寫(xiě)英文字母了,即便如此,在某些場(chǎng)景下我們單單有集合和區(qū)間去匹配多個(gè)字符也是很低效的,所以正則表達(dá)式衍生出了很多可以匹配多個(gè)字符的簡(jiǎn)寫(xiě)方式:

正則表達(dá)式 含義
. 換行符之外的任意字符
d 數(shù)字 0~9 (即[0-9])
D 與d相反,表示 除了數(shù)字0~9的任意字符
w 26個(gè)大小寫(xiě)字母、數(shù)字、下劃線(即[a-zA-Z0-9_])
W 與w相反,表示 除了基本字符下劃線的任意字符
s 空字符,包括 制表符、換頁(yè)符、換行符、空格
S 與s相反,表示 非空字符?
數(shù)量匹配

我們?cè)谶M(jìn)行對(duì)字符匹配的時(shí)候往往需要對(duì)匹配的字符數(shù)量進(jìn)行限制,本章節(jié)就數(shù)量元字符進(jìn)行講解,從字面意義可以看出數(shù)量元字符肯定就是對(duì)匹配字符的個(gè)數(shù)進(jìn)行限制啦,例如 同樣是上面的"hello,world",我們需要找出"hello",一種方式通過(guò)單子符匹配方式即 /hello/ ,其實(shí)我們還可以對(duì)其進(jìn)行簡(jiǎn)化,表示精確區(qū)間范圍的 {min,max} or{num}元字符,"hello"中"l"出現(xiàn)了兩次,那么我們就可以改寫(xiě)成 /hel{2}o/ ,當(dāng)然這個(gè)例子比較簡(jiǎn)單,我們換個(gè)復(fù)雜一點(diǎn)的,現(xiàn)在我們需要從"OObama like bababanana ..."中找出"ba"連續(xù)出現(xiàn)2次以上的地方,從內(nèi)容上可以看出"ba"出現(xiàn)的地方有兩處,這個(gè)時(shí)候我們實(shí)際要找的是"bababa",所以我們可以寫(xiě)成 /ba{2,}/ ,除了 {} 外,正則表達(dá)式還有很多用來(lái)數(shù)量匹配的元字符:

正則表達(dá)式 含義
? 匹配0或1個(gè)字符(即0|1
* 匹配0或者多個(gè)字符(即0|n
+ 匹配1或者多個(gè)字符(即1|n
{min,max} or {num} 精確區(qū)間匹配,min表示最少,max表示最多個(gè)數(shù),num表示精確個(gè)數(shù)
位置匹配

位置元字符主要是用來(lái)限制查找內(nèi)容的范圍,例如限制在內(nèi)容的開(kāi)頭或者內(nèi)容的結(jié)尾等,舉個(gè)例子 "Hello,World!Hello, China"我們想查找開(kāi)頭的"Hello",但內(nèi)容中"Hello"出現(xiàn)了兩次,因此我們需要一個(gè)可以限制查找范圍為內(nèi)容開(kāi)頭的元字符, /^/ 表示匹配表達(dá)式的開(kāi)頭,所以我們改為/^Hello/,有客官舉報(bào)說(shuō),大騙子,我通過(guò) /Hello/ 也可以匹配到,好,我們換一個(gè),現(xiàn)在改成"World is my World!",我需要匹配第二個(gè)"World",這...不慌不慌,我們通過(guò) /$/ 限制查找范圍是表達(dá)式的結(jié)尾就可以了,即 /World$/ ,除了限制范圍是開(kāi)頭、結(jié)尾,我們還可以通過(guò) // 來(lái)限制單詞的邊界,或者 /(?=xx)/ 來(lái)匹配某個(gè)(xx)前面的內(nèi)容符合表達(dá)式的字符,通過(guò) /?<=xx/ 來(lái)匹配某個(gè)后面的內(nèi)容符合表達(dá)式的字符,舉個(gè)例子現(xiàn)在有"People like apple",我想在所有ple的單詞中找到符合ple前面為"ap"的那個(gè)ple,則可以寫(xiě)成/(?<=ap)ple/,總結(jié)正則表達(dá)式中對(duì)位置進(jìn)行匹配的元字符有:

?正則表達(dá)式 含義
^ 匹配表達(dá)式的開(kāi)頭
$ 匹配表達(dá)式的結(jié)尾
b 匹配單詞的邊界
B 匹配非單詞的邊界
(?=xx) 向前匹配符合x(chóng)x規(guī)則的副詞
(?!xx) 向前匹配不符合x(chóng)x規(guī)則的副詞
(?<=xx) 向后匹配符合x(chóng)x規(guī)則的副詞
(? 向后匹配不符合x(chóng)x規(guī)則的副詞
模式匹配

通過(guò)正則表達(dá)式進(jìn)行內(nèi)容匹配的時(shí)候,我們會(huì)遇到對(duì)全文內(nèi)容匹配、多行內(nèi)容匹配等場(chǎng)景,正則表達(dá)式也提供了三種模式元字符進(jìn)行模式匹配。g表示全局模式,即匹配所有的內(nèi)容;i表示忽略大小寫(xiě),即匹配內(nèi)容的時(shí)候忽略字母的大小寫(xiě);
m表示多行匹配模式,即對(duì)多行內(nèi)容進(jìn)行匹配,并且各種模式可以混合使用,例如"Hello World, hello China",我們需要匹配所有的"Hello"且不區(qū)分大小寫(xiě),即/hello/ig。

正則表達(dá)式 含義
g 匹配全局模式
i 匹配不區(qū)分字母大小寫(xiě)
m 匹配多行模式

?

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/109687.html

相關(guān)文章

  • 原生js練習(xí)題-第一課

    摘要:于是找來(lái)了前輩們留下的經(jīng)典原生練習(xí)題,以期把看過(guò)的內(nèi)容用起來(lái),加深自己對(duì)原生的掌握。鼠標(biāo)移入移出改變樣式實(shí)現(xiàn)效果繼續(xù)樣式轉(zhuǎn)換,雖然用的偽類(lèi)便能實(shí)現(xiàn),但既然是的練習(xí)題就得用用鼠標(biāo)事件了。 0x0關(guān)于這個(gè)系列 差不多把《js高級(jí)程序設(shè)計(jì)》刷完了,所謂實(shí)踐出真知,尤其編程這種實(shí)踐和經(jīng)驗(yàn)相當(dāng)重要的事情,不能光說(shuō)不做。但以我現(xiàn)在的水平,直接上手那些大項(xiàng)目是還是不夠格的,還是得一步步扎實(shí)好基礎(chǔ)再有...

    mdluo 評(píng)論0 收藏0
  • js正則達(dá)式學(xué)習(xí)筆記

    摘要:說(shuō)來(lái)慚愧,做前端快三年對(duì)于正則表達(dá)式的應(yīng)用還是很淺薄,大家都知道正則的速度基本上是最快的,但就是懶得去記那些語(yǔ)法和規(guī)則,這次項(xiàng)目中多次用到了需要匹配替換的動(dòng)作,終于下定決心去研究一下了。 說(shuō)來(lái)慚愧,做前端快三年對(duì)于正則表達(dá)式的應(yīng)用還是很淺薄,大家都知道正則的速度基本上是最快的,但就是懶得去記那些語(yǔ)法和規(guī)則,這次項(xiàng)目中多次用到了需要匹配替換的動(dòng)作,終于下定決心去研究一下了。 實(shí)例化正則對(duì)...

    Towers 評(píng)論0 收藏0
  • 深入淺出,手把手教你編寫(xiě)正則達(dá)式

    摘要:日常代碼的開(kāi)發(fā)中,大家都或多或少的碰到一些正則表達(dá)式,但有的朋友只是會(huì)用,或者大致明白,希望這篇對(duì)正則深入淺出的文章能夠讓大家有所收獲。主要可以干的事情有兩個(gè),引用和反向引用,在一些稍微復(fù)雜的正則表達(dá)式里,我們常常會(huì)用到這些。 日常代碼的開(kāi)發(fā)中,大家都或多或少的碰到一些正則表達(dá)式,但有的朋友只是會(huì)用,或者大致明白,希望這篇對(duì)正則深入淺出的文章能夠讓大家有所收獲。 基本語(yǔ)法 [xyz] ...

    bitkylin 評(píng)論0 收藏0
  • 深入淺出,手把手教你編寫(xiě)正則達(dá)式

    摘要:日常代碼的開(kāi)發(fā)中,大家都或多或少的碰到一些正則表達(dá)式,但有的朋友只是會(huì)用,或者大致明白,希望這篇對(duì)正則深入淺出的文章能夠讓大家有所收獲。主要可以干的事情有兩個(gè),引用和反向引用,在一些稍微復(fù)雜的正則表達(dá)式里,我們常常會(huì)用到這些。 日常代碼的開(kāi)發(fā)中,大家都或多或少的碰到一些正則表達(dá)式,但有的朋友只是會(huì)用,或者大致明白,希望這篇對(duì)正則深入淺出的文章能夠讓大家有所收獲。 基本語(yǔ)法 [xyz] ...

    andot 評(píng)論0 收藏0
  • 深入淺出,手把手教你編寫(xiě)正則達(dá)式

    摘要:日常代碼的開(kāi)發(fā)中,大家都或多或少的碰到一些正則表達(dá)式,但有的朋友只是會(huì)用,或者大致明白,希望這篇對(duì)正則深入淺出的文章能夠讓大家有所收獲。主要可以干的事情有兩個(gè),引用和反向引用,在一些稍微復(fù)雜的正則表達(dá)式里,我們常常會(huì)用到這些。 日常代碼的開(kāi)發(fā)中,大家都或多或少的碰到一些正則表達(dá)式,但有的朋友只是會(huì)用,或者大致明白,希望這篇對(duì)正則深入淺出的文章能夠讓大家有所收獲。 基本語(yǔ)法 [xyz] ...

    Jackwoo 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<