日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

一文搞懂正则表达式

發(fā)布時(shí)間:2023/12/18 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一文搞懂正则表达式 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

最近在學(xué)習(xí)正則表達(dá)式,找了很多文章都很混亂,花了好大功夫終于搞懂了,因此在這里出一個(gè)系統(tǒng)性的教程,系統(tǒng)對(duì)讀者有幫助。

參考文章:https://www.liujiangblog.com/course/python/73

在線正則表達(dá)式測(cè)試器:https://tool.oschina.net/regex/

總結(jié)

正則表達(dá)式的字符總共分為以下5種,這里原文檔的講解有點(diǎn)問(wèn)題和錯(cuò)誤,不便于理解,因此我自己調(diào)換了些順序,便于理解。5種正則表達(dá)式中,我根據(jù)其特性分為字符表達(dá)式,輔助表達(dá)式,其中輔助表達(dá)式分為字符數(shù)量輔助與字符位置輔助,字符表達(dá)式即我們用來(lái)匹配正則表達(dá)式的各種字符的代號(hào)。

  • 數(shù)量表達(dá)式主要用來(lái)表達(dá)需要很多重復(fù)字符表達(dá)的時(shí)候只需要一個(gè)字符就可以表達(dá)很多重復(fù)的字符,比如例如手機(jī)號(hào)碼13666666666,一般的新手可能會(huì)寫(xiě)成\d\d\d\d\d\d\d\d\d\d\d(注意,這不是一個(gè)恰當(dāng)?shù)谋磉_(dá)式,其中\(zhòng)d是可以表達(dá)6的一種正則字符),不但寫(xiě)著費(fèi)勁,看著也累,還不一定準(zhǔn)確恰當(dāng)。這種情況可以使用表達(dá)式再加上修飾匹配次數(shù)的特殊符號(hào){},不用重復(fù)書(shū)寫(xiě)表達(dá)式就可以重復(fù)匹配。比如[abcd][abcd]可以寫(xiě)成[abcd]{2};
  • 位置表達(dá)式主要用于表達(dá)對(duì)應(yīng)字符的位置,比如說(shuō)希望匹配學(xué)號(hào)A008,A字母一定是在開(kāi)頭,因此需要對(duì)應(yīng)的位置限制符

除了以上兩種表達(dá)式以外,正則表達(dá)式中還存在一種比較特別的字符,稱為元字符,這種字符用來(lái)表達(dá)一些特殊的含義與功能,比如說(shuō)字符匹配的優(yōu)先級(jí)(比如(ab),用了括號(hào)括起來(lái)以后操作是對(duì)ab兩者同時(shí)做),或者一些邏輯操作,比如[abc]是匹配abc三者的任意一個(gè)。注意,在正則表達(dá)式之中優(yōu)先級(jí)非常重要,這個(gè)在最后會(huì)介紹,

詳細(xì)介紹

字符表達(dá)式

普通字符

字母、數(shù)字、漢字、下劃線、以及沒(méi)有特殊定義的符號(hào),都是"普通字符"。正則表達(dá)式中的普通字符,在匹配的時(shí)候,只匹配與自身相同的一個(gè)字符

例如:表達(dá)式c,在匹配字符串abcde時(shí),匹配結(jié)果是:成功;匹配到的內(nèi)容是c;匹配到的位置開(kāi)始于2,結(jié)束于3。(注:下標(biāo)從0開(kāi)始還是從1開(kāi)始,因當(dāng)前編程語(yǔ)言的不同而可能不同)

預(yù)定義匹配字符集

這個(gè)集合是通過(guò)一些字符來(lái)匹配同一組普通字符。可以同時(shí)匹配某個(gè)預(yù)定義字符集中的任意一個(gè)字符。比如,表達(dá)式\d可以匹配任意一個(gè)數(shù)字。雖然可以匹配其中任意字符,但是只能是一個(gè),不是多個(gè)。如下表所示,注意大小寫(xiě):

表達(dá)式

匹配

\d

任意一個(gè)數(shù)字,0~9 中的任意一個(gè)

\w

任意一個(gè)字母或數(shù)字或下劃線,也就是 A~Z,a~z,0~9,_ 中的任意一個(gè)

\s

空格、制表符、換頁(yè)符等空白字符的其中任意一個(gè)

\D

\d的反集,也就是非數(shù)字的任意一個(gè)字符,等同于[^\d]

\W

\w的反集,也就是[^\w]

\S

\s的反集,也就是[^\s]

例如表達(dá)式\d\d,在匹配abc123時(shí),匹配的結(jié)果是:成功;匹配到的內(nèi)容是12;匹配到的位置開(kāi)始于3,結(jié)束于5。

轉(zhuǎn)義字符

一些無(wú)法書(shū)寫(xiě)或者具有特殊功能的字符,采用在前面加斜杠"\"進(jìn)行轉(zhuǎn)義的方法。這些字符在之后的輔助字符或者元字符中會(huì)有單獨(dú)的作用,因此不能直接加進(jìn)去,需要轉(zhuǎn)義,否則會(huì)破壞正則表達(dá)式的含義。例如下表所示

表達(dá)式

匹配

\r,?\n

匹配回車和換行符

\t

匹配制表符

\\

匹配斜杠\

\^

匹配^符號(hào)

\$

匹配$符號(hào)

\.

匹配小數(shù)點(diǎn).

尚未列出的還有問(wèn)號(hào)?、星號(hào)*和括號(hào)等其他的符號(hào)。所有正則表達(dá)式中具有特殊含義的字符在匹配自身的時(shí)候,都要使用斜杠進(jìn)行轉(zhuǎn)義。這些轉(zhuǎn)義字符的匹配方法與普通字符類似,也是匹配與之相同的一個(gè)字符。

例如表達(dá)式$d,在匹配字符串"abc?𝑑𝑒"時(shí),匹配結(jié)果是:成功;匹配到的內(nèi)容是𝑑𝑒"時(shí),匹配結(jié)果是:成功;匹配到的內(nèi)容是?d;匹配到的位置開(kāi)始于3,結(jié)束于5。

?

輔助表達(dá)式

重復(fù)匹配

前面的表達(dá)式,無(wú)論是只能匹配一種字符的表達(dá)式,還是可以匹配多種字符其中任意一個(gè)的表達(dá)式,都只能匹配一次。但是有時(shí)候我們需要對(duì)某個(gè)片段進(jìn)行重復(fù)匹配,例如手機(jī)號(hào)碼13666666666,一般的新手可能會(huì)寫(xiě)成\d\d\d\d\d\d\d\d\d\d\d(注意,這不是一個(gè)恰當(dāng)?shù)谋磉_(dá)式),不但寫(xiě)著費(fèi)勁,看著也累,還不一定準(zhǔn)確恰當(dāng)。這種情況可以使用表達(dá)式再加上修飾匹配次數(shù)的特殊符號(hào){},不用重復(fù)書(shū)寫(xiě)表達(dá)式就可以重復(fù)匹配。比如[abcd][abcd]可以寫(xiě)成[abcd]{2}

表達(dá)式

匹配

{n}

表達(dá)式重復(fù)n次,比如\d{2}相當(dāng)于\d\d,a{3}相當(dāng)于aaa

{m,n}

表達(dá)式至少重復(fù)m次,最多重復(fù)n次。比如ab{1,3}可以匹配ababbabbb

{m,}

表達(dá)式至少重復(fù)m次,比如\w\d{2,}可以匹配a12,_1111,M123等等

?

匹配表達(dá)式0次或者1次,相當(dāng)于{0,1},比如a[cd]?可以匹配a,ac,ad

+

表達(dá)式至少出現(xiàn)1次,相當(dāng)于{1,},比如a+b可以匹配ab,aab,aaab等等

*

表達(dá)式出現(xiàn)0次到任意次,相當(dāng)于{0,},比如\^*b可以匹配b,^^^b等等

其中有些例子一定要注意!比如ab{1,3}中重復(fù)的是b而不是ab(ab){1,3}這樣重復(fù)的才是ab。表達(dá)式\^*b中重復(fù)的是\^而不是^,要從左往右讀正則表達(dá)式,轉(zhuǎn)義符號(hào)有更高的優(yōu)先級(jí),需要和后面的字符整體認(rèn)讀。

表達(dá)式\d+\.?\d*在匹配It costs $12.5時(shí),匹配的結(jié)果是:成功;匹配到的內(nèi)容是12.5;匹配到的位置開(kāi)始于10,結(jié)束于14。

表達(dá)式go{2,8}gle在匹配Ads by goooooogle時(shí),匹配的結(jié)果是:成功;匹配到的內(nèi)容是goooooogle;匹配到的位置開(kāi)始于7,結(jié)束于17。

注意:非常重要,重復(fù)表達(dá)式只對(duì)前面的一個(gè)或者一組字符起作用,意思是如果有括號(hào),那就一起起作用,高優(yōu)先級(jí)可以先于低優(yōu)先級(jí)操作。這一點(diǎn)對(duì)理解下面的貪婪模式與非貪婪模式很重要!

貪婪模式與非貪婪模式

在重復(fù)匹配時(shí),正則表達(dá)式默認(rèn)總是盡可能多的匹配,這被稱為貪婪模式。意思是只要滿足重復(fù)前后的字符一致,那么正則表達(dá)式就會(huì)匹配最多的那種。比如,針對(duì)文本dxxxdxxxd,有滿足前后都是d的有兩種匹配模式,第一種是dxxxd,第二種是dxxxdxxxd, 而表達(dá)式(d)(\w+)(d)中的\w+將匹配第一個(gè)d和最后一個(gè)d之間的所有字符xxxdxxx。可見(jiàn),\w+在匹配的時(shí)候,總是盡可能多的匹配符合它規(guī)則的字符。同理,帶有?、*和{m,n}的重復(fù)匹配表達(dá)式都是盡可能地多匹配。這就叫做貪婪模式。但是有時(shí)候,這種模式不是我們想要的結(jié)果,比如最常見(jiàn)的HTML標(biāo)簽匹配。假設(shè)有如下的字符串

(這里原文檔錯(cuò)誤了,原文檔中用的是如下的表示:

這里每個(gè)td后面都有一個(gè)換行符,用源文檔的語(yǔ)句跑出來(lái)也是分開(kāi)的結(jié)果,并不會(huì)連續(xù),修改以后應(yīng)該用如下所示的式子):

<table><tr><td>蘋(píng)果</td><td>桃子</td><td>香蕉</td></tr></table>

我們的意圖是獲取每個(gè)<td></td>標(biāo)簽中的元素內(nèi)容,那么如果你將正則表達(dá)式寫(xiě)成<td>(.*)</td>的話,你得到的是<td>蘋(píng)果</td><td>桃子</td><td>香蕉</td>這么個(gè)東西,而不是

<td>蘋(píng)果</td>

<td>桃子</td>

<td>香蕉</td>(即匹配出了三個(gè)項(xiàng),而不是一次全匹配了出來(lái),因?yàn)槿齻€(gè)或者一個(gè)開(kāi)頭結(jié)尾都一致)

注意:不是說(shuō)重復(fù)匹配只對(duì)前面的一個(gè)或者一組字符起作用嗎?為什么這里要求前后的字符?這里就體現(xiàn)了上面的重復(fù)匹配只對(duì)前面的起作用的原則的重要姓,如果不明確這一點(diǎn)非常容易混淆。

在這里這個(gè)原則其實(shí)并沒(méi)有被打破,+起作用的只是w本身,不包括前后的d,因此重復(fù)匹匹配符并不會(huì)對(duì)前后的產(chǎn)生要求,真正產(chǎn)生要求的是要求盡量多匹配的貪婪模式,因?yàn)橹貜?fù)匹配字符只是要求了至少出現(xiàn)的次數(shù),但沒(méi)表明最多出現(xiàn)的次數(shù),所以貪婪模式會(huì)持續(xù)匹配直到最后找到滿足前后要求的最長(zhǎng)序列。

因此在這個(gè)時(shí)候我們就要使用非貪婪模式:?在修飾匹配次數(shù)的特殊符號(hào)后再加上一個(gè)?問(wèn)號(hào),則可以使匹配次數(shù)不定的表達(dá)式盡可能少的匹配,使可匹配可不匹配的表達(dá)式,盡可能的"不匹配"。如果少匹配就會(huì)導(dǎo)致整個(gè)表達(dá)式匹配失敗的時(shí)候,與貪婪模式類似,非貪婪模式會(huì)最小限度的再多匹配一些,以使整個(gè)表達(dá)式匹配成功。

表達(dá)式<td>(.*?)</td>匹配上面的字符串時(shí),將只得到<td>蘋(píng)果</td>,再次匹配下一個(gè)時(shí),可以得到<td>桃子</td>,以此類推。

針對(duì)文本"dxxxdxxxd"舉例:

表達(dá)式(d)(\w+?)中的\w+?將盡可能少的匹配第一個(gè)d之后的字符,結(jié)果是只匹配了一個(gè)"x",整體只匹配了dx表達(dá)式(d)(\w+?)(d)為了讓整個(gè)表達(dá)式匹配成功,\w+?不得不匹配xxx才可以讓后邊的d匹配,從而使整個(gè)表達(dá)式匹配成功。因此,結(jié)果是\w+?匹配了xxx,整體匹配了dxxx。

注意:如以上所說(shuō),貪婪模式會(huì)對(duì)匹配序列的前后位置有要求,非貪婪模式也如此,但只是對(duì)前后緊鄰的字符或者字符組合有要求,對(duì)更前面的沒(méi)有要求。

?

位置匹配

有時(shí)候,我們對(duì)匹配出現(xiàn)的位置有要求,比如開(kāi)頭、結(jié)尾、單詞之間等等。

表達(dá)式

匹配

^

在字符串開(kāi)始的地方匹配,符號(hào)本身不匹配任何字符

$

在字符串結(jié)束的地方匹配,符號(hào)本身不匹配任何字符

\b

匹配一個(gè)單詞邊界,也就是一個(gè)位置前后字符不全是\W的位置,與下面的\B相對(duì)應(yīng),符號(hào)本身不匹配任何字符注意,這里原作者解釋有誤,不是字符與空格之間的位置。

\B

匹配非單詞邊界,即左右兩邊都是\w范圍或者左右兩邊都不是\w范圍時(shí)的字符縫隙

例如表達(dá)式^aaa在匹配xxx aaa xxx時(shí),匹配結(jié)果是:失敗。因?yàn)?/span>^要求在字符串開(kāi)始的地方匹配。

表達(dá)式aaa?在匹配𝑥𝑥𝑥?𝑎𝑎𝑎?𝑥𝑥𝑥時(shí),匹配結(jié)果是:失敗。因?yàn)樵谄ヅ?#x1d465;𝑥𝑥𝑎𝑎𝑎𝑥𝑥𝑥時(shí),匹配結(jié)果是:失敗。因?yàn)?要求在字符串結(jié)束的地方匹配。

表達(dá)式.\b.在匹配@@@abc時(shí),匹配結(jié)果是:成功;匹配到的內(nèi)容是@a,因?yàn)樵?#64;和a的中間位置滿足前后不都為\w的條件,因此匹配到這個(gè)位置;匹配到的位置開(kāi)始于2,結(jié)束于4。

表達(dá)式\bend\b在匹配weekend,endfor,end時(shí),匹配結(jié)果是:成功;匹配到的內(nèi)容是end;匹配到的位置開(kāi)始于15,結(jié)束于18。注意這里每個(gè)\b的前后都要滿足前后不都為\w的條件,因此weekend和endfordou不行,weekend的ebu符合,endfor的d不符合

這里后面兩個(gè)比較難以理解,我采取了另外一份資料的解釋(原網(wǎng)址:https://www.cnblogs.com/litmmp/p/4925374.html),并通過(guò)我自己的理解寫(xiě)出來(lái):

原表述:一個(gè)位置前后字符不全是\W的位置

首先需要明確什么是位置:

It's a nice day today.

'I' 占一個(gè)位置,'t' 占一個(gè)位置,所有的單個(gè)字符(包括不可見(jiàn)的空白字符)都會(huì)占一個(gè)位置,這樣的位置我給它取個(gè)名字叫“顯式位置”。

注意:字符與字符之間還有一個(gè)位置,例如 'I' 和 't' 之間就有一個(gè)位置(沒(méi)有任何東西),這樣的位置我給它取個(gè)名字叫“隱式位置”。

“隱式位置”就是 \b 的關(guān)鍵!通俗的理解,\b 就是“隱式位置”。

此時(shí),再來(lái)理解一下這句話:

如果需要更精確的說(shuō)法,\b 匹配這樣的位置:它的前一個(gè)字符和后一個(gè)字符不全是(一個(gè)是,一個(gè)不是或不存在) \w。

翻譯一下這句話:

“隱式位置” \b,匹配這樣的位置:它的前一個(gè)“顯式位置”字符和后一個(gè)“顯式位置”字符不全是 \w。

這樣理解起來(lái)就方便多了

用以下例子表示:

就用 "It's a nice day today." 舉例說(shuō)明:

正確的正則:\bnice\b

分析:第一個(gè) \b 前面一個(gè)字符是空格,后面一個(gè)字符是 'n',不全是 \w,所以可以匹配出 'n' 是一個(gè)單詞的開(kāi)頭。第二個(gè) \b 前面一個(gè)字符是 'e',后面一個(gè)字符是空格,不全是 \w,可以匹配出 'e' 是一個(gè)單詞的結(jié)尾。所以,合在一起,就能匹配出以 'n' 開(kāi)頭以 'e' 結(jié)尾的單詞,這里就能匹配出 "nice" 這個(gè)單詞。

錯(cuò)誤的正則:a\bnice

分析:我見(jiàn)過(guò)有人類似于這樣來(lái)寫(xiě)正則,想要達(dá)到的目的是匹配出上一個(gè)單詞以 'a' 結(jié)尾,下一個(gè)單詞以 'n' 開(kāi)頭的部分,這里想匹配出 "a nice"。但是這個(gè)正則表達(dá)的可不是這個(gè)目的,\b 前面是字符 'a',后面是字符 'n',兩個(gè)都是“顯式字符”,顯然違背了 \b 的含義,所以這就是個(gè)錯(cuò)誤的表達(dá)式,匹配不出任何東西。想要匹配出 "a nice",正確的正則寫(xiě)法是:a\b.\bnice(不能換行)

?

?

元字符

元字符表達(dá)了很多特殊功能,其中最重要的是要注意這些字符的優(yōu)先級(jí),其中括號(hào)可以將上面所說(shuō)的幾種字符都包在一起作為一個(gè)字符組合對(duì)待:

表達(dá)式

匹配

.

小數(shù)點(diǎn)可以匹配除了換行符\n以外的任意一個(gè)字符

|

邏輯或操作符

[]

匹配字符集中的一個(gè)字符

[^]

對(duì)字符集求反,也就是上面的反操作。尖號(hào)必須在方括號(hào)里的最前面

-

定義[]里的一個(gè)字符區(qū)間,例如[a-z]

\

對(duì)緊跟其后的一個(gè)字符進(jìn)行轉(zhuǎn)義

()

對(duì)表達(dá)式進(jìn)行分組,將圓括號(hào)內(nèi)的內(nèi)容當(dāng)做一個(gè)整體,并獲得匹配的值。注意將括號(hào)當(dāng)成整體的作用,這代表括號(hào)內(nèi)的字符可以被當(dāng)成一個(gè)字符看待

例如:

a.c匹配abc

(a|b)c匹配ac與bc

注意:這里(a|b)和[ab]實(shí)際上一樣,與的含義即為能匹配則匹配,不用一定要同時(shí)出現(xiàn),(a|b)這種表達(dá)實(shí)際上是為了完成(ab|c)這種[abc]完不成的表達(dá)

[abc]1匹配a1或者b1或者c1

使用方括號(hào)[]包含一系列字符,能夠匹配其中任意一個(gè)字符。用[^]包含一系列字符,則能夠匹配其中字符之外的任意一個(gè)字符。

[ab5@]匹配ab5@

[^abc]匹配a,b,c之外的任意一個(gè)字符

注意:^只對(duì)后面的字符起作用

[f-k]匹配f~k?之間的任意一個(gè)字母

[^A-F0-3]匹配A~F以及0~3之外的任意一個(gè)字符

?

以下為優(yōu)先級(jí)列表:

可以看見(jiàn),括號(hào)優(yōu)先級(jí)很高

反向引用

反向引用是一種特殊的()的使用方法,因此放在元字符之后介紹。

表達(dá)式在匹配時(shí),小括號(hào)()包含的表達(dá)式所匹配到的字符串會(huì)被記錄并保存在系統(tǒng)中等之后使用。在獲取匹配結(jié)果的時(shí)候,之前的()包含的表達(dá)式所匹配到的字符串可被單獨(dú)重新獲取。這是一個(gè)非常有用也非常重要的特性。在實(shí)際應(yīng)用場(chǎng)合中,當(dāng)用某種邊界條件來(lái)查找(比如html變成中要求一個(gè)字符串前后必須為td對(duì)),而所要獲取的內(nèi)容又不指定對(duì)應(yīng)的邊界時(shí),必須使用小括號(hào)來(lái)指定所要的范圍。比如前面的?<td>(.*?)</td>",因?yàn)椴蝗倍ㄇ昂笫鞘裁?#xff0c;只知道是一對(duì),因此可以用小括號(hào)構(gòu)成一個(gè)邊界符號(hào)對(duì)

?

"小括號(hào)包含的表達(dá)式所匹配到的字符串"可以在匹配過(guò)程中直接使用。表達(dá)式后邊的部分,可以引用前面"括號(hào)內(nèi)的子匹配已經(jīng)匹配到的字符串"。引用方法是\加上一個(gè)數(shù)字。\1引用第1對(duì)括號(hào)內(nèi)匹配到的字符串,\2?引用第2對(duì)括號(hào)內(nèi)匹配到的字符串……以此類推,如果一對(duì)括號(hào)內(nèi)包含另一對(duì)括號(hào),則外層的括號(hào)先排序號(hào)。換句話說(shuō),哪一對(duì)的左括號(hào)"("在前,那這一對(duì)就先排序號(hào)。舉例如下:

表達(dá)式('|")(.*?)(\1)在匹配'Hello', "World"時(shí),匹配結(jié)果是:成功;匹配到的內(nèi)容是'Hello'。再次匹配下一個(gè)時(shí),可以匹配到?"World"。這里的(\1),動(dòng)態(tài)的引用了('|")匹配到的結(jié)果。

表達(dá)式(\w)\1{4,}在匹配aa bbbb abcdefg ccccc 111121111 999999999時(shí),匹配結(jié)果是:成功;匹配到的內(nèi)容是ccccc。再次匹配下一個(gè)時(shí),將得到999999999。這個(gè)表達(dá)式要求\w范圍的字符至少重復(fù)5次,注意與\w{5,}之間的區(qū)別。這里\1代表一個(gè)另外的\w,因此是重復(fù)五次

?

表達(dá)式<(\w+)\s*(\w+(=('|").*?\4)?\s*)*>.*?</\1>在匹配<td id='td1' style="bgcolor:white"></td>時(shí),匹配結(jié)果是成功。如果<td></td>不配對(duì),則會(huì)匹配失敗;如果改成其他配對(duì),也可以匹配成功。這就是常用的HTML標(biāo)簽匹配方法。

?

這里博主詳細(xì)解釋一下這個(gè)正則表達(dá)式。這個(gè)式子先拆出幾個(gè)括號(hào),找到優(yōu)先級(jí)高的一下4個(gè)字符串:

1, (\w+)

?2('|")

3, (=('|").*?\4)

4,? (\w+(=('|").?\4)?\s)

其中,2式指的是'或者”,放到3式中的\4引用的就是2式(因?yàn)?式是第四個(gè)左括號(hào)),然后在3式中的.*?表示了最小的前后具有引號(hào)對(duì)的字符串,在實(shí)例字符串中代表了'td1'或者"bgcolor:white"

后在4式中在3式的后面加了?與\S,因此表示3式只出現(xiàn)0或1次,限制其最多1次,后接空格。所以整個(gè)4式就代表最多出現(xiàn)一次的后接空格的3式子,即代表'td1' 或者"bgcolor:white"

原正則表達(dá)式中在4式后加了*,因此表示越多越好,所以實(shí)例字符串中的兩個(gè)引號(hào)串都被表達(dá)了進(jìn)來(lái)

再之后就是前后的格式標(biāo)識(shí)符,最后的</\1>引用了第一個(gè)(\w+)表達(dá)了前后的字符串對(duì),這樣整體就表達(dá)出來(lái)了。

總結(jié)

以上是生活随笔為你收集整理的一文搞懂正则表达式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。