最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

字符組是正則表達(dá)式最基本的結(jié)構(gòu)之一。字符組表示“同一位置上可能出現(xiàn)的各種字符”,寫法:[ ]方括號(hào)之間列出所有可能出現(xiàn)的字符。例如:[123]、[ab]、[#.?]等等。具體含義:[013456789]表示在同一個(gè)位置上可能出現(xiàn)0-9中任意一個(gè)數(shù),重點(diǎn)強(qiáng)調(diào)是一位和一個(gè)數(shù)。此外,字符組中的字符出現(xiàn)順序和出現(xiàn)次數(shù)對(duì)字符組沒有影響,[0123456789]和[0215436879]是完全一致的。

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

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

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

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

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

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

在.NET中,不構(gòu)成歧義的情況下,“[”和“]”可以不用轉(zhuǎn)義,程序也可以得到預(yù)期結(jié)果,但是這種寫法可讀性較差,而且出現(xiàn)錯(cuò)誤時(shí)不易排查,因此不推薦這種寫法

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

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

常見錯(cuò)誤用法:

因?yàn)閇]本身表示的就是字符之間“或”的關(guān)系,因此在[]中使用“|”來表示“或”的關(guān)系是錯(cuò)誤的。

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

舉例

       源字符串:ab|ac
       正則表達(dá)式:[a|b|c]+
       匹配結(jié)果:ab|ac

[^ ] 排除型字符組

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

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

舉例

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

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

       預(yù)期結(jié)果:<aaa>、<ddd>

       錯(cuò)誤寫法:<[^abc]*>

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

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

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

相關(guān)文章

最新評(píng)論

泌阳县| 邯郸市| 宜都市| 新兴县| 扎赉特旗| 衢州市| 盘锦市| 新巴尔虎左旗| 海丰县| 石家庄市| 蓬莱市| 密云县| 韶山市| 邛崃市| 鹤山市| 德州市| 颍上县| 临沧市| 平舆县| 定边县| 闽清县| 河曲县| 宁阳县| 滦南县| 冕宁县| 米易县| 洪洞县| 红桥区| 锡林浩特市| 岢岚县| 黄骅市| 修武县| 高陵县| 苏尼特右旗| 宁远县| 罗定市| 原阳县| 德兴市| 苏尼特左旗| 浦城县| 河东区|