一個正則表達(dá)式含有一些具有特殊意義字符的字符串,這些特殊字符稱做正則表達(dá)式中的元字符。
比如:"\\dcat"中的d就是有特殊意義的元字符,代表0到9中的任何一個。
字符串"Ocat","1cat","2cat",…,"9cat"都是和正則表達(dá)式"\\dcat"匹配的字符串。
字符串對象調(diào)用public boolean matches(String regex)方法可以判斷當(dāng)前字符串對象是否和參數(shù)regex指定的正則表達(dá)式匹配。
常用的元字符如下:
元字符 | 在正則表達(dá)式中的寫法 | 意義 |
. | . | 代表任何一個字符 |
\d | \\d | 代表0-9任何一個數(shù)字 |
\D | \\D | 代表任何一個非數(shù)字字符 |
\s | \\s | 代表空格類字符,‘\t’、‘\n’、‘\x0B’、‘\f’、‘\r’ |
\S | \\S | 代表非空格類字符 |
\w | \\w | 代表可用于標(biāo)識符的字符(不包括美元符號) |
\W | \\W | 代表不能用于標(biāo)識符的字符 |
\p{Lower} | \\p{Lower} | 小寫字母[a-z] |
\p{Upper} | \\p{Upper} | 大寫字母[A-Z] |
\p{ASCⅡ} | \\p{ASCⅡ} | ASCⅡ字符 |
\p{Alpha} | \\p{Alpha} | 字母 |
\p{Digit} | \\p{Digit} | 數(shù)字字符[0-9] |
\p{Alnum} | \\p{Alnum} | 字母或數(shù)字 |
\p{Punct} | \\p{Punct} | 標(biāo)點(diǎn)符號 |
\p{Graph} | \\p{Graph} | 可視字符 |
\p{Print} | \\p{Print} | 可打印字符 |
\p{Blank} | \\p{Blank} | 空格或制表符[\t] |
\p{Cntrl} | \\p{Cntrl} | 控制字符 |
在正則表達(dá)式中可以用方括號括起若干個字符來表示一個元字符,該元字符代表方括號中的任何一個字符,例如:
regex = "[159]ABC";
那么,"1ABC"、"5ABC"和"9ABC"都是和正則表達(dá)式regex匹配的字符串。
例如:
[abc]代表a、b、c中的任何一個。
[^abc]代表除了a、b、c以外的任何字符。
[a-zA-Z]代表英文字母(包括大寫和小寫)中的任何一個。
[a-d]代表a至d中的任何一個。
另外,中括號里允許嵌套中括號,可以進(jìn)行并、交、差運(yùn)算,例如:
[a-d[m-p]]代表a至d或m至p中的任何字符(并)。
[a-z&&[def]]代表d、e、或f中的任何一個(交)。
[a-f&&[^bc]]代表a、d、e、f(差)。
注意:由于“.”代表任何一個字符,所以在正則表達(dá)式中如果想使用普通意義的點(diǎn)字符,必須使用[.]或用\56表示普通意義的點(diǎn)字符。
在正則表達(dá)式中可以使用限定修飾符。
舉個例子,對于限定修飾符?,如果X代表正則表達(dá)式中的一個元字符或普通字符,那么X?就表示X出現(xiàn)0次或1次,例如:
regex = "hel1o[2468]?";
那么,"hello","hello2","hello4","hello6"和"hello8"都是與正則表達(dá)式regex匹配的字符串。
常用的限定修飾符的用法如下:
限定修飾符 | 意義 |
X? | X出現(xiàn)0次或1次 |
X* | X出現(xiàn)0次或多次 |
X+ | X出現(xiàn)1次或多次 |
X{n} | X恰好出現(xiàn)n次 |
X{n,} | X至少出現(xiàn)n次 |
X{n,m} | X出現(xiàn)n次至m次 |
XY | X的后綴是Y |
X|Y | X或Y |
例如:
regex = "@\\w{4}";
那么,"@abcd"、"@Java"、"@知行合一"都是與正則表達(dá)式regex匹配的字符串。
注意:有關(guān)正則表達(dá)式的細(xì)節(jié)可以去java.util.regex包中查閱Pattern類。
C語言網(wǎng)提供由在職研發(fā)工程師或ACM藍(lán)橋杯競賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點(diǎn)擊了解:
一點(diǎn)編程也不會寫的:零基礎(chǔ)C語言學(xué)練課程
解決困擾你多年的C語言疑難雜癥特性的C語言進(jìn)階課程
從零到寫出一個爬蟲的Python編程課程
只會語法寫不出代碼?手把手帶你寫100個編程真題的編程百練課程
信息學(xué)奧賽或C++選手的 必學(xué)C++課程
藍(lán)橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競賽課入門課程
手把手講解近五年真題的藍(lán)橋杯輔導(dǎo)課程