\b | 回退(并刪除)一個字符(Backspace鍵) |
\f | 換頁符 |
\n | 換行符 |
\r | 回車符 |
\t | 制表符(Tab鍵) |
\v | 垂直制表符 |
來看一個例子,把文件中的空白行去掉:
文本:
8 5 4 1 6 3 2 7 9
7 6 2 9 5 8 3 4 1
9 3 1 4 2 7 8 5 6
6 9 3 8 7 5 1 2 4
5 1 8 3 4 2 6 9 7
2 4 7 6 1 9 5 3 8
3 26 7 8 4 9 1 5
4 8 9 5 3 1 7 6 2
1 7 5 2 9 6 4 8 3
正則表達(dá)式:\r\n\r\n
分析:\r\n匹配一個回車+換行組合,windows操作系統(tǒng)中把它作為文本行的結(jié)束標(biāo)簽。使用正則表達(dá)式\r\n\r\n進(jìn)行的搜索將匹配兩個連續(xù)的行尾標(biāo)簽,而這正好是空白行。
注意:Unix和Linux操作系統(tǒng)中只使用一個換行符來結(jié)束一個文本行,換句話說,在Unix或Linux系統(tǒng)中匹配空白行只使用\n\n即可,不需要加上\r。同時(shí)適用于windows和Unix/Linux的正則表達(dá)式應(yīng)該包括一個可先的\r和一個必須匹配的\n,即\r?\n\r?\n,這將會在后面的文章中講到。
Java代碼如下:
public static void matchBlankLine() throws Exception{ BufferedReader br = new BufferedReader(new FileReader(new File("E:/九宮格.txt"))); StringBuilder sb = new StringBuilder(); char[] cbuf = new char[1024]; int len = 0; while(br.ready() (len = br.read(cbuf)) > 0){ br.read(cbuf); sb.append(cbuf, 0, len); } String reg = "\r\n\r\n"; System.out.println("原內(nèi)容:\n" + sb.toString()); System.out.println("處理后:-----------------------------"); System.out.println(sb.toString().replaceAll(reg, "\r\n")); }
運(yùn)行結(jié)果如下:
原內(nèi)容: 8 5 4 1 6 3 2 7 9 7 6 2 9 5 8 3 4 1 9 3 1 4 2 7 8 5 6 6 9 3 8 7 5 1 2 4 5 1 8 3 4 2 6 9 7 2 4 7 6 1 9 5 3 8 3 2 6 7 8 4 9 1 5 4 8 9 5 3 1 7 6 2 1 7 5 2 9 6 4 8 3 處理后:----------------------------- 8 5 4 1 6 3 2 7 9 7 6 2 9 5 8 3 4 1 9 3 1 4 2 7 8 5 6 6 9 3 8 7 5 1 2 4 5 1 8 3 4 2 6 9 7 2 4 7 6 1 9 5 3 8 3 2 6 7 8 4 9 1 5 4 8 9 5 3 1 7 6 2 1 7 5 2 9 6 4 8 3
三、匹配特定的字符類別
字符集合(匹配多個字符中的某一個)是最常見的匹配形式,而一些常用的字符集合可以用特殊元字符來代替。這些元字符匹配的是某一類別的字符(類元字符),類元字符并不是必不可少的,因?yàn)榭梢酝ㄟ^逐一列舉有關(guān)字符或通過定義一個字符區(qū)間來匹配某一類字符,但是使用它們構(gòu)造出來的正則表達(dá)式簡明易懂,在實(shí)際應(yīng)用中很常用。
1、匹配數(shù)字與非數(shù)字
\d 任何一個數(shù)字,等價(jià)于[0-9]或[0123456789]
\D 任何一個非數(shù)字,等價(jià)于[^0-9]或[^0123456789]
2、匹配字母和數(shù)字與非字母和數(shù)字
字母(A-Z不區(qū)分大小寫)、數(shù)字、下劃線是一種常用的字符集合,可用如下類元字符:
\w 任何一個字母(不區(qū)分大小寫)、數(shù)字、下劃線,等價(jià)于[0-9a-zA-Z_]
\W 任何一個非字母數(shù)字和下劃線,等價(jià)于[^0-9a-zA-Z_]
3、匹配空白字符與非空白字符
\s 任何一下空白字符,等價(jià)于[\f\n\r\t\v]
\S 任何一下空白字符,等價(jià)于[^\f\n\r\t\v]
注意:退格元字符\b沒有不在\s的范圍之內(nèi)。
4、匹配十六進(jìn)制或八進(jìn)制數(shù)值
十六進(jìn)制:用前綴\x來給出,如:\x0A對應(yīng)于ASCII字符10(換行符),其效果等價(jià)于\n。
八進(jìn)制:用前綴\0來給出,數(shù)值本身可以是兩位或三位數(shù)字,如:\011對應(yīng)于ASCII字符9(制表符),其效果等價(jià)于\t。
四、使用POSIX字符類
POSIX字符類是很多正則表達(dá)式實(shí)現(xiàn)都支持的一種簡寫形式。Java也支持它,但JavaScript不支持。POSIX字符如下所示:
[:alnum:] | 任何一個字母或數(shù)字,等價(jià)于[a-zA-Z0-9] |
[:alpha:] | 任何一個字母,等價(jià)于[a-zA-Z] |
[:blank:] | 空格或制表符,等價(jià)于[\t] |
[:cntrl:] | ASCII控制字符(ASCII 0到31,再加上ASCII 127) |
[:digit:] | 任何一個數(shù)字,等價(jià)于[0-9] |
[:graph:] | 任何一個可打印字符,但不包括空格 |
[:lower:] | 任何一個小寫字母,等價(jià)于[a-z] |
[:print:] | 任何一個可打印字符 |
[:punct:] | 既不屬于[:alnum:]和[:cntrl:]的任何一個字符 |
[:space:] | 任何一個空白字符,包括空格,等價(jià)于[^\f\n\r\t\v] |
[:upper:] | 任何一個大寫字母,等價(jià)于[A-Z] |
[:xdigit:] | 任何一個十六進(jìn)制數(shù)字,等價(jià)于[a-fA-F0-9] |
POSIX字符和之前見過的元字符不太一樣,我們來看一個前面利用正則表達(dá)式來匹配網(wǎng)頁中的顏色的例子:
文本:span style="background-color:#3636FF;height:30px;width:60px;">測試/span>
正則表達(dá)式:#[[:xdigit:]] [[:xdigit:]] [[:xdigit:]] [[:xdigit:]] [[:xdigit:]] [[:xdigit:]]
結(jié)果:span style="background-color:【#3636FF】;height:30px;width:60px;">測試/span>
注意:這里使用的模式以[[開頭、以]]結(jié)束,這是使用POSIX字符類所必須的,POSIX字符必須括在[:和:]之間,外層[和]字符用來定義一個集合,內(nèi)層的[和]字符是POSIX字符類本身的組成部分。
在java中的POSIX字符表示有所不同,不是包括在[:和:]之間,而是以\p開頭,包括在{和}之間,且大小寫有區(qū)別,同時(shí)增加了\p{ASCII},如下所示:
\p{Alnum} | 字母數(shù)字字符:[\p{Alpha}\p{Digit}] |
\p{Alpha} | 字母字符:[\p{Lower}\p{Upper}] |
\p{ASCII} | 所有 ASCII:[\x00-\x7F] |
\p{Blank} | 空格或制表符:[ \t] |
\p{Cntrl} | 控制字符:[\x00-\x1F\x7F] |
\p{Digit} | 十進(jìn)制數(shù)字:[0-9] |
\p{Graph} | 可見字符:[\p{Alnum}\p{Punct}] |
\p{Lower} | 小寫字母字符:[a-z] |
\p{Print} | 可打印字符:[\p{Graph}\x20] |
\p{Punct} | 標(biāo)點(diǎn)符號:!"#$%'()*+,-./:;=>?@[\]^_`{|}~ |
\p{Space} | 空白字符:[ \t\n\x0B\f\r] |
\p{Upper} | 大寫字母字符:[A-Z] |
\p{XDigit} | 十六進(jìn)制數(shù)字:[0-9a-fA-F] |
PS:這里再為大家提供2款非常方便的正則表達(dá)式工具供大家參考使用:
JavaScript正則表達(dá)式在線測試工具:
http://tools.jb51.net/regex/javascript
正則表達(dá)式在線生成工具:
http://tools.jb51.net/regex/create_reg
希望本文所述對大家正則表達(dá)式學(xué)習(xí)有所幫助。
標(biāo)簽:大興安嶺 本溪 涼山 哈密 湖州 ???/a> 常州 泰安
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《正則表達(dá)式教程之元字符的使用詳解》,本文關(guān)鍵詞 正則,表達(dá)式,教程,之元,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。