讀古今文學網 > 精通正則表達式(第3版) > Pattern的其他方法 >

Pattern的其他方法

Other Pattern Methods

除了主要的compile factories,Pattern類還提供了一些輔助方法:

split

下一頁會詳細講解兩種形式的split方法。

String pattern

這個方法返回用於創建本pattern的正則表達式字符串。

String toString

這個方法從Java 1.5之後可用,等價於pattern方法。

int flags

這個方法返回pattern創建時傳遞給compile factory的flag參數(作為整數)。

static String quote(String text)

從 Java 1.5 開始提供的 static 方法,返回 text 對應的正則文字字符串,能夠作為Pattern.compile 的參數。例如,Pattern.quote(〞main()〞)返回字符串『Qmain ()E』,作為正則表達式它解釋為「Qmain()E」,完全能夠匹配原始的參數『main()』。

static boolean matches(String regex,CharSequence text)

這個static方法返回的Boolean值表示正則表達式能否匹配文本(與matcher方法的參數一樣,可以是一個String或者任何實現CharSequence的對象☞373)。其實,它等價於:

Pattern.compile(regex).matcher(text).matches;

如果需要傳遞編譯參數,或者所要的信息不只是簡單的匹配是否成功,則應該使用之前介紹的辦法。

如果這個方法需要多次調用(例如,在循環中,或者其他經常調用的代碼中),預先把正則表達式編譯為一個Pattern對象,然後每次應用的效率會高很多。

Pattern的split方法,單個參數

Patter n\'s split Method,with One Argument

String split(CharSequence text)

pattern的這個方法接收文本(一個CharSequence對像),然後返回一個數組,包含由這個pattern對應的正則表達式在其中的匹配分隔的文本。String類的 split方法也提供了同樣的功能。

String result=Pattern.compile(〞\\.〞).split(〞209.204.146.22〞);

返回4個字符串構成的數組(『209』、『204』、『146』和『22』),由文本中的三個「.」分隔。這個簡單例子只用單個字符分隔,但其實我們可以使用任何正則表達式。例如,你可以用非字母和數字的字符把一個字符串粗略地分為「單詞」:

String result=Pattern.compile(〞\\W+〞).split(Text);

如果給出的字符串是,則返回4個字符串(『what』、『s』、『up』、『Doc』),由這個表達式的 3 次匹配(如果包含非 ASCII 文本,你可能需要使用「P{L}+」或「[^p{L}p{N}_]」而不是「W+」☞367)分隔。

相鄰匹配之間的空元素

如果正則表達式能夠在文本的最開頭匹配,返回數組的第一個元素應該是空字符串(這是一個合法的字符串,但是不包括任何字符)。同樣,如果正則表達式能夠在某個位置匹配兩次以上,應該返回空字符串,因為鄰近的匹配「分割」了零長度的文本。例如:

String result=Pattern.compile(〞\\s*,\\s*〞).split(〞,one,two,,,3〞);按照兩邊可能出現空白字符的逗號來分割,返回一個 5 個元素的數組:空字符串、『one』、『two』、兩個空字符串和『3』。

序列末尾出現的所有空字符串都會被忽略:

String result=Pattern.compile(〞:〞).split(〞:xx:〞);

這樣會得到兩個字符串:一個空字符串和『xx』。如果希望保留這些元素,請使用下面介紹的雙參數版本的split。

Pattern的split方法,兩個參數

Pattern\'s split Method,with Two Arguments

String split(CharSequence text,int limit)

這個版本的split方法能夠控制pattern應用的次數,以及結尾部分可能出現的空元素的處理策略。String類的split方法也可以獲得同樣效果。

limit參數等於0,大於0,還是小於0,各有意義。

limit小於0

如果limit小於0,就會保留數組結尾的空元素。

String result=Pattern.compile(〞:〞).split(〞:xx:〞,-1);

返回包含3個字符串的數組(一個空字符串,『xx』,然後是另一個空字符串)。

limit等於0

把limit設置為0,等於不設置limit,所以不會保留結尾的空元素。

limit大於0

如果limit大於0,則split返回的數組最多包括limit個元素。也就是說,正則表達式至多會應用limit-1次。(如果limit=3,則需要2次匹配來分割3個字符串)。

進行 limit-1 次匹配之後,匹配停止,目標字符串中其餘的部分(在最後一次匹配之後的文本)會作為結果數組的尾元素。

如果某個字符串如下:

Friedl,Jeffrey,Eric Francis,America,Ohio,Rootstown

並且希望得到頭三個部分,你可以將字符串分割為4 個部分(頭3 個部分是名字,然後是最後的「其他」字符串):

為split設置limit的理由在於,如果不需要更多地處理,它可以用來停止查找其他的字符串、創建新字符串,限制數組的長度,提高效率。提供limit能夠限制工作量。