正則表示式(二)-- 匹配一組字元
一、匹配多個字元中的某一個
正則表示式是區分大小寫的,比如使用正則表示式cat可以匹配文字cat而不能匹配文字CAT,如果我們要匹配出含有文字cat的所有結果,而不關心它們大小寫的問題,這是就要需要使用元字元'['和元字元']'來建立一個字元集合,[]方括號間的所有字元組成了字元集合,字元集合的匹配結果是能夠與該集合的任意一個成員相匹配的文字。
例子:
文字:cat Cat CAT
正則表示式:cat
結果:cat Cat CAT
文字:cat Cat CAT
正則表示式:[Cc][Aa][Tt]
結果:cat Cat CAT
使用[Cc]便可以匹配C或者c的任意一個,一個單獨的'[]'不管字元集合多大,只匹配一個字元。
二、使用字元集合區間
假如有這樣的一份文字:包含很多三位數很其他的無關文字,而我們只想把這些三位數匹配出來,使用字元集合可以這樣寫[0123456789][0123456789][0123456789],但這樣寫過於繁瑣,如果要匹配二十六個字母中的任一個大寫字元,則字元集合裡的字元個數將為26個,如果不區分大小寫,將為52個,寫起來非常繁瑣,所以可以使用元字元'-'來 創造字元區間(0-9, a-z,A-Z等)來簡化寫法,如[0-9]=[0123456789],需要注意的是,字元區間的首字元要大於等於尾字元,[0-9]不可以寫成[9-0],並且字元區間可以疊加, 比如[0-9a-z]=[0123456789abcdefghijklmnopqrstuvwxyz],,另外'-'也是一個特殊的元字元,在'['和‘]’之間時,'-'為元字元,但在之外的地方,‘-’只是一普通字元,匹配它不需要 用'\'轉義。
例子:
文字:123 456 a21
正則表示式:[0-9][0-9][0-9]
結果:123 456 a21
文字:123 456 a21
正則表示式:[a-z][0-9][0-9]
結果:123 456 a21
三、取非匹配
使用字元集合(區間)可以來匹配集合(區間)中的任一字元,而有時我們想匹配除此字元集合(區間)以外的任意字元,這時就要使用元字元'^'來對字元集合(區間)進行取非操作。
文字:123 456 a21 &13
正則表示式:[^0-9][0-9][0-9]
結果:123 456 a21 &13
空格不在0-9之間,所以也被匹配了出來。
使用取非匹配需要注意的是,‘^’的效果將作用於給定字元集合裡的所有字元或字元區間,而不是緊跟在'^'字元後面的哪一個字元或者字元區間。
四、匹配特定的字元類別
使用字元區間可以在一定程度上簡化我們的操作,但是當要匹配的字元非常多時寫起來也非常繁瑣,這時我們就可以用一些特殊的元字元來匹配一些特殊的字元集合,比如\d=[0-9]=[0123456789],而將d大寫成D,則代表著取非操作\D=[^0-9]。常見的特殊元字元如下:
元字元 含義
\d 任何一個數字字元,等價於[0-9]
\D 任何一個非數字字元,等價於[^0-9]
\w 任意一個字母(大小寫均可),數字或下劃線,等價於[a-zA-Z0-9_]
\W 任意一個非字母數字或者非下劃線,等價於[^a-zA-Z0-9_]
例子:
文字:1234 12345 a1b2c3 abcdef c2d3f2 a2d3ff
正則表示式:\w\d\w\d\w\d
結果:1234 12345 a1b2c3 abcdef c2d3f2 a2d3ff