這篇文章主要為大家展示了“正則表達(dá)式組的示例分析”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“正則表達(dá)式組的示例分析”這篇文章吧。
堅(jiān)守“ 做人真誠 · 做事靠譜 · 口碑至上 · 高效敬業(yè) ”的價值觀,專業(yè)網(wǎng)站建設(shè)服務(wù)10余年為成都水電改造小微創(chuàng)業(yè)公司專業(yè)提供企業(yè)網(wǎng)站制作營銷網(wǎng)站建設(shè)商城網(wǎng)站建設(shè)手機(jī)網(wǎng)站建設(shè)小程序網(wǎng)站建設(shè)網(wǎng)站改版,從內(nèi)容策劃、視覺設(shè)計(jì)、底層架構(gòu)、網(wǎng)頁布局、功能開發(fā)迭代于一體的高端網(wǎng)站建設(shè)服務(wù)。
正則表達(dá)式組的理解
把正則表達(dá)式的一部分放在圓括號內(nèi),你可以將它們形成組。然后你可以對整個組使用一些正則操作,例如重復(fù)操作符。
要注意的是,只有圓括號“()”才能用于形成組。“[]”用于定義字符集?!皗}”用于定義重復(fù)操作。
當(dāng)用“()”定義了一個正則表達(dá)式組后,正則引擎則會把被匹配的組按照順序編號,存入緩存。當(dāng)對被匹配的組進(jìn)行向后引用的時候,可以用“\數(shù)字”的方式進(jìn)行引用。﹤﹤\1﹥﹥引用***個匹配的后向引用組,﹤﹤\2﹥﹥引用第二個組,以此類推,﹤﹤\n﹥﹥引用第n個組。而﹤﹤\0﹥﹥則引用整個被匹配的正則表達(dá)式本身。我們看一個例子。
假設(shè)你想匹配一個HTML標(biāo)簽的開始標(biāo)簽和結(jié)束標(biāo)簽,以及標(biāo)簽中間的文本。比如﹤B﹥This is a test﹤/B﹥,我們要匹配﹤B﹥和﹤/B﹥以及中間的文字。我們可以用如下正則表達(dá)式:“﹤([A-Z][A-Z0-9]*)[^﹥]*﹥.*?﹤/\1﹥”
首先,“﹤”將會匹配“﹤B﹥”的***個字符“﹤”。然后[A-Z]匹配B,[A-Z0-9]*將會匹配0到多次字母數(shù)字,后面緊接著0到多個非“﹥”的字符。***正則表達(dá)式的“﹥”將會匹配“﹤B﹥”的“﹥”。接下來正則引擎將對結(jié)束標(biāo)簽之前的字符進(jìn)行惰性匹配,直到遇到一個“﹤/”符號。然后正則表達(dá)式中的“\1”表示對前面匹配的組“([A-Z][A-Z0-9]*)”進(jìn)行引用,在本例中,被引用的是標(biāo)簽名“B”。所以需要被匹配的結(jié)尾標(biāo)簽為“﹤/B﹥”
正則表達(dá)式組的相關(guān)解析:
你可以對相同的后向引用組進(jìn)行多次引用,﹤﹤([a-c])x\1x\1﹥﹥將匹配“axaxa”、“bxbxb”以及“cxcxc”。如果用數(shù)字形式引用的組沒有有效的匹配,則引用到的內(nèi)容簡單的為空。
一個后向引用不能用于它自身。﹤﹤([abc]\1)﹥﹥是錯誤的。因此你不能將﹤﹤\0﹥﹥用于一個正則表達(dá)式匹配本身,它只能用于替換操作中。
后向引用不能用于字符集內(nèi)部。﹤﹤(a)[\1b]﹥﹥中的﹤﹤\1﹥﹥并不表示后向引用。在字符集內(nèi)部,﹤﹤\1﹥﹥可以被解釋為八進(jìn)制形式的轉(zhuǎn)碼。
向后引用會降低引擎的速度,因?yàn)樗枰鎯ζヅ涞慕M。如果你不需要向后引用,你可以告訴引擎對某個組不存儲。例如:﹤﹤Get(?:Value)﹥﹥。其中“(”后面緊跟的“?:”會告訴引擎對于組(Value),不存儲匹配的值以供后向引用。
正則表達(dá)式組之重復(fù)操作與后向引用
當(dāng)對組使用重復(fù)操作符時,緩存里后向引用內(nèi)容會被不斷刷新,只保留***匹配的內(nèi)容。例如:﹤﹤([abc]+)=\1﹥﹥將匹配“cab=cab”,但是﹤﹤([abc])+=\1﹥﹥卻不會。因?yàn)?[abc])***次匹配“c”時,“\1”代表“c”;然后([abc])會繼續(xù)匹配“a”和“b”。***“\1”代表“b”,所以它會匹配“cab=b”。
應(yīng)用:檢查重復(fù)單詞--當(dāng)編輯文字時,很容易就會輸入重復(fù)單詞,例如“the the”。使用﹤﹤\b(\w+)\s+\1\b﹥﹥可以檢測到這些重復(fù)單詞。要刪除第二個單詞,只要簡單的利用替換功能替換掉“\1”就可以了。
正則表達(dá)式組的命名和引用
在PHP,Python中,可以用﹤﹤(?P﹤name﹥group)﹥﹥來對組進(jìn)行命名。在本例中,詞法?P﹤name﹥就是對組(group)進(jìn)行了命名。其中name是你對組的起的名字。你可以用(?P=name)進(jìn)行引用。
.NET的命名組
.NET framework也支持命名組。不幸的是,微軟的程序員們決定發(fā)明他們自己的語法,而不是沿用Perl、Python的規(guī)則。目前為止,還沒有任何其他的正則表達(dá)式實(shí)現(xiàn)支持微軟發(fā)明的語法。
下面是.NET中的例子:
(?﹤first﹥group)(?’second’group)
正如你所看到的,.NET提供兩種詞法來創(chuàng)建命名組:一是用尖括號“﹤﹥”,或者用單引號“’’”。尖括號在字符串中使用更方便,單引號在ASP代碼中更有用,因?yàn)锳SP代碼中“﹤﹥”被用作HTML標(biāo)簽。
要引用一個命名組,使用\k﹤name﹥或\k’name’.
當(dāng)進(jìn)行搜索替換時,你可以用“${name}”來引用一個命名組。
以上是“正則表達(dá)式組的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
網(wǎng)頁名稱:正則表達(dá)式組的示例分析
本文鏈接:http://jinyejixie.com/article46/jdojeg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供、做網(wǎng)站、商城網(wǎng)站、品牌網(wǎng)站建設(shè)、小程序開發(fā)、網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)