欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

正則表達式之字符組[?](Character?Classes)

 更新時間:2023年05月28日 12:25:47   作者:過客  
字符組是正則表達式最基本的結構之一,這里就為大家介紹一下字符組[]的正確使用方法,需要的朋友可以參考下

字符組是正則表達式最基本的結構之一。字符組表示“同一位置上可能出現的各種字符”,寫法:[ ]方括號之間列出所有可能出現的字符。例如:[123]、[ab]、[#.?]等等。具體含義:[013456789]表示在同一個位置上可能出現0-9中任意一個數,重點強調是一位和一個數。此外,字符組中的字符出現順序和出現次數對字符組沒有影響,[0123456789]和[0215436879]是完全一致的。

范圍表示法:[0123456789]是不是忒長了?OK,用-表示范圍,即:[0-9],如此一來是不是多快好省。但是要注意一點,不能9-0,因為9大于0啊。那如果是字母呢,可以[a-z]或者[A-Z],也不能z-a或者Z-A,因為在ASCII碼表中每個字符都是有一個十進制碼值的,如:0是45,A是65,a是97。而范圍表示是碼值小的-碼值大的,按照書寫規(guī)范上,應該是0-9,A-Z,a-z,切記不要錯誤認為A-z表示26個大寫字母和26個小寫字母,它們之間還有其他字母呢。大、小寫字母表示方法為:[A-Za-z].

[]能夠匹配所包含的一系列字符中的任意一個。需要注意的是,[]雖然能匹配其中的任意一個字符,但匹配的結果只能是一個字符,不是多個。

例如[abc]表示字符“a”或“b”或“c”。 

[]支持用連字符“-”連接兩個字符,來表示一個字符范圍。需要注意的是,“-”前后的兩個字符是有順序的,即使用相同的編碼時,后面的字符碼位應大于或等于前面字符的碼位。

例如[a-z]表示任意一個小寫字母。而在程序中使用[z-a]則會報“[x-y] 范圍的順序顛倒”這樣的異常。

大部分在正則中有特殊意義、在匹配其本身時需轉義的字符,在[]內是不需要轉義的。必須轉義的只有“\”、“[”和“]”,而“^”出現在[]開始位置,“-”前后構成范圍區(qū)間時,需要轉義,出現在其它位置不需要轉義,例如[\^.$^{\[(|)*+?-\\]

在.NET中,不構成歧義的情況下,“[”和“]”可以不用轉義,程序也可以得到預期結果,但是這種寫法可讀性較差,而且出現錯誤時不易排查,因此不推薦這種寫法

舉例:Regex reg = new Regex("[^]]+");  //不推薦

.NET的字符組中支持集合減法,語法[set1-[set2]],例如[a-z-[aeiou]]表示除元音外的小寫字母。但是除非你很了解這種語法的支持范圍,以及確實有必要這樣做,否則不要輕易使用這種可讀性較差的語法。事實上完全可以用多個范圍區(qū)間[b-df-hj-np-tv-z],在區(qū)間較多,導致可讀性差、容易出錯的情況下,可以使用正向預搜索來實現以上需求,(?![aeiou])[a-z],這種語法規(guī)則,支持范圍要大得多,可讀性也要好一些。

常見錯誤用法:

因為[]本身表示的就是字符之間“或”的關系,因此在[]中使用“|”來表示“或”的關系是錯誤的。

舉例:[a|b|c]表示的是“a”或“b”或“c”或“|”中的任意一個字符。
 

舉例

       源字符串:ab|ac
       正則表達式:[a|b|c]+
       匹配結果:ab|ac

[^ ] 排除型字符組

     [^ ]表示匹配任意一個未列舉的字符,同樣的,匹配的結果也只能是一個字符。
    例如[^abc]表示除字符“a”、“b”、“c”外的任意一個字符。
    [^ ]也支持字符分組,例如[^0-9]表示除數字外的任意一個字符。

 新手最容易犯的錯誤就是,用[^abc]或[^(abc)]這樣的表達式來匹配不包含“abc”子字符串的字符串。    

舉例

       源字符串:string yourStr = "<aaa>bbb<abc>ccc<ddd>";

       規(guī)則描述:取出yourStr中格式為<...>,但<>中不是abc的內容

       預期結果:<aaa>、<ddd>

       錯誤寫法:<[^abc]*>

       正確寫法:<(?!abc>)[^>]*>     

還有一點并不常見,\b在字符組外表示單詞邊界,但是在字符組內[\b]表示退格符。

到此這篇關于正則表達式之字符組[ ](Character Classes)的文章就介紹到這了,更多相關正則表達式字符組內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論