split() 方法根據(jù)匹配給定的正則表達式來拆分字符串
public String[] split(String regex,int limit)
limit 參數(shù)控制模式應用的次數(shù),因此影響所得數(shù)組的長度。
- 如果該限制 n 大于 0,則模式將被最多應用 n - 1 次,數(shù)組的長度將不會大于 n,而且數(shù)組的最后一項將包含所有超出最后匹配的定界符的輸入。
- 如果 n 為非正,那么模式將被應用盡可能多的次數(shù),而且數(shù)組可以是任何長度。
- 如果 n 為 0,那么模式將被應用盡可能多的次數(shù),數(shù)組可以是任何長
度,并且結(jié)尾空字符串將被丟棄。
public String[] split(String regex)
該方法的作用就像是使用給定的表達式和限制參數(shù) 0 來調(diào)用兩參數(shù) split 方法。因此,所得數(shù)組中不包括結(jié)尾空字符串
正則表達式的編譯表示形式
指定為字符串的正則表達式必須首先被編譯為此類的實例。然后,可將得到的模式用于創(chuàng)建 Matcher 對象,依照正則表達式,該對象可以與任意字符序列匹配。執(zhí)行匹配所涉及的所有狀態(tài)都駐留在匹配器中,所以多個匹配器可以共享同一模式。
因此,典型的調(diào)用順序是
Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aaaaab");
boolean b = m.matches();
//在僅使用一次正則表達式時,可以方便地通過此類定義 matches 方法。此方法編譯表達式并在單個調(diào)用中將輸入序列與其匹配。語句
boolean b = Pattern.matches("a*b", "aaaaab");
等效于上面的三個語句,盡管對于重復的匹配而言它效率不高,因為它不允許重用已編譯的模式。
此類的實例是不可變的,可供多個并發(fā)線程安全使用。Matcher 類的實例用于此目的則不安全。
正則表達式的構(gòu)造摘要
構(gòu)造 匹配
字符
x 字符 x
\ 反斜線字符
\0n 帶有八進制值 0 的字符 n (0 <= n <= 7)
\0nn 帶有八進制值 0 的字符 nn (0 <= n <= 7)
\0mnn 帶有八進制值 0 的字符 mnn(0 <= m <= 3、0 <= n <= 7)
\xhh 帶有十六進制值 0x 的字符 hh
\uhhhh 帶有十六進制值 0x 的字符 hhhh
\t 制表符 ('\u0009')
\n 新行(換行)符 ('\u000A')
\r 回車符 ('\u000D')
\f 換頁符 ('\u000C')
\a 報警 (bell) 符 ('\u0007')
\e 轉(zhuǎn)義符 ('\u001B')
\cx 對應于 x 的控制符
字符類
[abc] a、b 或 c(簡單類)
[^abc] 任何字符,除了 a、b 或 c(否定)
[a-zA-Z] a 到 z 或 A 到 Z,兩頭的字母包括在內(nèi)(范圍)
[a-d[m-p]] a 到 d 或 m 到 p:[a-dm-p](并集)
[a-z&&[def]] d、e 或 f(交集)
[a-z&&[^bc]] a 到 z,除了 b 和 c:[ad-z](減去)
[a-z&&[^m-p]] a 到 z,而非 m 到 p:[a-lq-z](減去)
預定義字符類
. 任何字符(與行結(jié)束符可能匹配也可能不匹配)
\d 數(shù)字:[0-9]
\D 非數(shù)字: [^0-9]
\s 空白字符:[ \t\n\x0B\f\r]
\S 非空白字符:[^\s]
\w 單詞字符:[a-zA-Z_0-9]
\W 非單詞字符:[^\w]
POSIX 字符類(僅 US-ASCII)
\p{Lower} 小寫字母字符:[a-z]
\p{Upper} 大寫字母字符:[A-Z]
\p{ASCII} 所有 ASCII:[\x00-\x7F]
\p{Alpha} 字母字符:[\p{Lower}\p{Upper}]
\p{Digit} 十進制數(shù)字:[0-9]
\p{Alnum} 字母數(shù)字字符:[\p{Alpha}\p{Digit}]
\p{Punct} 標點符號:!"#$%&'()*+,-./:;<=>?@[]^_`{|}~
\p{Graph} 可見字符:[\p{Alnum}\p{Punct}]
\p{Print} 可打印字符:[\p{Graph}\x20]
\p{Blank} 空格或制表符:[ \t]
\p{Cntrl} 控制字符:[\x00-\x1F\x7F]
\p{XDigit} 十六進制數(shù)字:[0-9a-fA-F]
\p{Space} 空白字符:[ \t\n\x0B\f\r]
java.lang.Character 類(簡單的 java 字符類型)
\p{javaLowerCase} 等效于 java.lang.Character.isLowerCase()
\p{javaUpperCase} 等效于 java.lang.Character.isUpperCase()
\p{javaWhitespace} 等效于 java.lang.Character.isWhitespace()
\p{javaMirrored} 等效于 java.lang.Character.isMirrored()
Unicode 塊和類別的類
\p{InGreek} Greek 塊(簡單塊)中的字符
\p{Lu} 大寫字母(簡單類別)
\p{Sc} 貨幣符號
\P{InGreek} 所有字符,Greek 塊中的除外(否定)
[\p{L}&&[^\p{Lu}]] 所有字母,大寫字母除外(減去)
邊界匹配器
^ 行的開頭
$ 行的結(jié)尾
\b 單詞邊界
\B 非單詞邊界
\A 輸入的開頭
\G 上一個匹配的結(jié)尾
\Z 輸入的結(jié)尾,僅用于最后的結(jié)束符(如果有的話)
\z 輸入的結(jié)尾
Greedy 數(shù)量詞
X? X,一次或一次也沒有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超過 m 次
Reluctant 數(shù)量詞
X?? X,一次或一次也沒有
X*? X,零次或多次
X+? X,一次或多次
X{n}? X,恰好 n 次
X{n,}? X,至少 n 次
X{n,m}? X,至少 n 次,但是不超過 m 次
Possessive 數(shù)量詞
X?+ X,一次或一次也沒有
X*+ X,零次或多次
X++ X,一次或多次
X{n}+ X,恰好 n 次
X{n,}+ X,至少 n 次
X{n,m}+ X,至少 n 次,但是不超過 m 次
Logical 運算符
XY X 后跟 Y
X|Y X 或 Y
(X) X,作為捕獲組
Back 引用
\n 任何匹配的 nth 捕獲組
引用
\ Nothing,但是引用以下字符
\Q Nothing,但是引用所有字符,直到 \E
\E Nothing,但是結(jié)束從 \Q 開始的引用
特殊構(gòu)造(非捕獲)
(?:X) X,作為非捕獲組
(?idmsux-idmsux) Nothing,但是將匹配標志i d m s u x on - off
(?idmsux-idmsux:X) X,作為帶有給定標志 i d m s u x on - off
的非捕獲組 (?=X) X,通過零寬度的正 lookahead
(?!X) X,通過零寬度的負 lookahead
(?<=X) X,通過零寬度的正 lookbehind
(?<!X) X,通過零寬度的負 lookbehind
(?>X) X,作為獨立的非捕獲組