Java正則表達式之String.split()方法

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,作為獨立的非捕獲組

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • \ :將下一字符標記為特殊字符、文本、反向引用或八進制轉(zhuǎn)義符。例如,"n"匹配字符"n"。"\n"匹配換行符。序列...
    小沙鷹168閱讀 618評論 0 1
  • Java的正則表達式講解:(為了能看清,本文正則表達式用中文的句號代替英文句點) 英文句點符號:匹配單個任意字符。...
    紅姑娘閱讀 4,522評論 0 2
  • 表達式意義: 1.字符 x 字符 x。例如a表示字符a {Java學習資料免費分享微信:tangniu5206...
    尚學先生閱讀 370評論 0 0
  • 正則表達式到底是什么東西?字符是計算機軟件處理文字時最基本的單位,可能是字母,數(shù)字,標點符號,空格,換行符,漢字等...
    獅子挽歌閱讀 2,287評論 0 9
  • 吃完泡饃后,我又開始了我的“逛”之旅?!叭ケ职?,聽說哪兒文人的名作挺多的?!?我打了一個飽嗝,看著手機上的旅游指...
    寒C君閱讀 450評論 0 0

友情鏈接更多精彩內(nèi)容