您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關Perl正則表達式中字符與字符集有哪些,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
⑴元字符
元字符的元(meta)實際上是通配的意思(但與linux的通配符不是一個體系)。在Perl中,反斜杠\就是一個特殊的元字符,要想匹配元字符本身(而不是他在正則表達式里面的含義),可以在相應的元字符之前加反斜杠,例如'\.'、'\*'、'\\'就分別匹配文本中的'.'、'*'、'\'。此外元字符^匹配行首,在集合字符[]內部表示補集,元字符$則匹配行尾。
⑵模式分組與捕獲
fred+ #可匹配freddddd…(fred)+ #可匹配fredfredfred…
(.)\1 #匹配一個任意字符并重復一次,也即匹配兩個連續(xù)的相同字符y(….) d\1 #匹配y開頭后面四個任意字符,d開頭也是相同這樣字符的兩個單詞,例如yabba dabbay(.)(.)\2\1 #匹配y開頭后面兩個任意字符,然后接下來是這兩個字符的倒序的單詞,這是匹配類似yabba的這種回文結構y((.)(.)\3\2) d\1 #嵌套結構的反向引用,這里匹配y開頭和d開頭具有四個字符回文結構的單詞組,例如yabba dabba
(.)\g{1}11 #匹配類似于aa11這樣的字符
在這種格式寫法下,還可以使用相對位置進行編號:
(.)(.)\g{-1}11 #匹配類似于xaa11這樣的字符
相對反向引用使用負號來指左邊的捕獲組,-1則為在左邊最靠近引用位置的捕獲組,這種寫法避免了在另外加入括號之后所有編號都必須修改的窘況,更有利于程序維護。
y(?:(.)(.)\2\1) d(?:(.)(.)\4\3) #外層括號只起到模式分組作用,可以匹配類似yabba deffe結構的詞組
⑶字符集
字符集(character class)是指一組可能出現的字符,通過寫在方括號[]內的表達式進行表示,字符集可以匹配包含在集合內的單個字符。例如[abcxyz]可以匹配出現在字符串中的a、b、c、x、y、z中的任一個,相連的字符中間可以使用連字符-表示范圍,例如上式可以寫為[a-cx-z],如果在集合內包含連字符本身(而不是表示范圍的含義)則可以使用反斜杠轉義。對于ASCII字符可以使用反斜杠加八進制數字編碼進行表示,例如[\000-\177]會匹配全部127個ASCII字符。在集合中開頭添加脫字符^可以取補集,例如[^0-9]會匹配除數字以外的字符。對于Unicode字符集,除了可以像\x{2668}通過編碼進行匹配外,還可以通過Unicode屬性,例如很多字符屬于空白符Space、數字Digit等,那么匹配的表達式則為\p{Space}和\p{Digit}。
字符集的出現是為了簡寫正則表達式,字符集也可以縮寫例如\d可以代表[0-9],\w可以代表[a-zA-Z0-9_]。但在Perl從ASCII時代邁向Unicode時代之后,字符集的縮寫更加寬泛,\d除了可以匹配普通數字,還可以匹配其他語言里的各種數字寫法。從Perl 5.14開始,可以在正則表達式界定符后面添加修飾符a(關于界定符和修飾符詳見下一小節(jié)),則正則表達式嚴格按照ASCII編碼進行匹配,例如/\d/a則等同于/[0-9]/。字符集縮寫將小寫字母改為大寫字母即變?yōu)檠a集,例如ASCII編碼下\D可以代表[^0-9],此外很有意思的是[\d\D]將會匹配任何字符且包括換行符,這比'.'所包含的范圍更廣。
⑷元字符優(yōu)先級
和操作符或者函數一樣,正則表達式的元字符也存在優(yōu)先級問題。元字符優(yōu)先級規(guī)則如下所示:
①在此優(yōu)先級表的最頂端是括號(),在模式分組和反向引用的時候使用,括號內部的任何部分比括號外的部分結合更緊密;
②第二級是數量詞即星號(*), 加號(+),問號(?)以及由花括號表示的數量詞,如{5,15}、{3, }、{5}等,它們通常和前一項元素緊密結合;
③第三級的是錨定和序列(sequence),錨定包括開頭^、結尾$、詞界符\b、非詞界符\B,序列(一個元素緊接著一個元素)實際上是一種操作,雖然它沒有使用元字符;
關于“Perl正則表達式中字符與字符集有哪些”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。