您好,登錄后才能下訂單哦!
這篇文章主要介紹java中如何使用正則表達(dá)式中的組,文中介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們一定要看完!
組是括號劃分的正則表達(dá)式,可以根據(jù)組的編號來引用某個組。組號為0表示整個表達(dá)式,組號1表示從左到右被第一個括號擴(kuò)起的組,以此類推。
例如:
A(B(CD))E中有三個組:組0是ABCDE,組1是BCD,組2是CD。
Matcher對象提供了一系列方法,用以獲取與組相關(guān)的信息:
方法作用
public int groupCount()返回該匹配器的模式中的分組數(shù)目,第0組不包括在內(nèi) public String group()返回前一次匹配操作的第0組(整個匹配) public String group(int i)返回在前一次匹配操作期間的指定的組號 public int start(int group)返回在前一次匹配操作中尋找到的組的起始索引 public int end(int group)返回在前一次匹配操作中尋找到的組的最后一個字符索引加一的值
例子:
import java.util.regex.Matcher; import java.util.regex.Pattern; public class GroupsDemo { static public final String POEM="Twas brilling, and the slithy toves\n" + "Did gyre and gimble in the wabe.\n" + "All mimsy were the borogoves,\n" + "And the mome raths outgrabe.\n"; public static void main(String[] args) { /* * Patten.MULTILINE為模式標(biāo)記,表示多行模式,在多行模式下,表達(dá)式^和$分別匹配一行的開始和結(jié)束,也可以匹配輸入字符串的開始和結(jié)束 * \S+表示一次以上的非空格字符,s+表示一次以上的空格字符,目的匹配每行的最后3個字符。 */ Matcher m=Pattern.compile("(\\S+)\\s+((\\S+)\\s+(\\S+))$",Pattern.MULTILINE).matcher(POEM); while (m.find()) { for (int i = 0; i <=m.groupCount(); i++) { System.out.print("第"+i+"組是:"+"["+m.group(i)+"] "); } System.out.println(); } } }
運(yùn)行結(jié)果:
第0組是:[the slithy toves] 第1組是:[the] 第2組是:[slithy toves] 第3組是:[slithy] 第4組是:[toves] 第0組是:[in the wabe.] 第1組是:[in] 第2組是:[the wabe.] 第3組是:[the] 第4組是:[wabe.] 第0組是:[were the borogoves,] 第1組是:[were] 第2組是:[the borogoves,] 第3組是:[the] 第4組是:[borogoves,] 第0組是:[mome raths outgrabe.] 第1組是:[mome] 第2組是:[raths outgrabe.] 第3組是:[raths] 第4組是:[outgrabe.]
start()和end()的使用:
在匹配操作成功之后,start()返回先前匹配的起始位置的索引,而end()返回所匹配的最后字符的索引加一的值。如果匹配操作失敗后(或先于一個正在進(jìn)行的匹配操作去操作)調(diào)用start()或end()將會產(chǎn)生IllegalStateException.
下面是使用例子:
import java.util.regex.Matcher; import java.util.regex.Pattern; public class GroupsDemo { static public final String POEM="Twas brilling, and the slithy toves\n" + "Did gyre and gimble in the wabe.\n" + "All mimsy were the borogoves,\n"; public static void main(String[] args) { /* * Patten.MULTILINE為模式標(biāo)記,表示多行模式,在多行模式下,表達(dá)式^和$分別匹配一行的開始和結(jié)束,也可以匹配輸入字符串的開始和結(jié)束 * \S+表示一次以上的非空格字符,s+表示一次以上的空格字符,目的匹配每行的最后3個字符。 */ Matcher m=Pattern.compile("(\\S+)\\s+((\\S+)\\s+(\\S+))$",Pattern.MULTILINE).matcher(POEM); while (m.find()) { System.out.print("起始索引為:"+m.start()); System.out.println("結(jié)束索引為:"+m.end()); for (int i = 0; i <=m.groupCount(); i++) { System.out.print("第"+i+"組是:"+"["+m.group(i)+"] "); System.out.print("該組的起始索引為:"+m.start(i)); System.out.println("該組的結(jié)束索引為:"+m.end(i)); } System.out.println(); } } }
運(yùn)行結(jié)果:
起始索引為:19結(jié)束索引為:35 第0組是:[the slithy toves] 該組的起始索引為:19該組的結(jié)束索引為:35 第1組是:[the] 該組的起始索引為:19該組的結(jié)束索引為:22 第2組是:[slithy toves] 該組的起始索引為:23該組的結(jié)束索引為:35 第3組是:[slithy] 該組的起始索引為:23該組的結(jié)束索引為:29 第4組是:[toves] 該組的起始索引為:30該組的結(jié)束索引為:35 起始索引為:56結(jié)束索引為:68 第0組是:[in the wabe.] 該組的起始索引為:56該組的結(jié)束索引為:68 第1組是:[in] 該組的起始索引為:56該組的結(jié)束索引為:58 第2組是:[the wabe.] 該組的起始索引為:59該組的結(jié)束索引為:68 第3組是:[the] 該組的起始索引為:59該組的結(jié)束索引為:62 第4組是:[wabe.] 該組的起始索引為:63該組的結(jié)束索引為:68 起始索引為:79結(jié)束索引為:98 第0組是:[were the borogoves,] 該組的起始索引為:79該組的結(jié)束索引為:98 第1組是:[were] 該組的起始索引為:79該組的結(jié)束索引為:83 第2組是:[the borogoves,] 該組的起始索引為:84該組的結(jié)束索引為:98 第3組是:[the] 該組的起始索引為:84該組的結(jié)束索引為:87 第4組是:[borogoves,] 該組的起始索引為:88該組的結(jié)束索引為:98
以上是“java中如何使用正則表達(dá)式中的組”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。