溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

java中如何使用正則表達(dá)式中的組

發(fā)布時間:2021-11-20 13:43:29 來源:億速云 閱讀:251 作者:小新 欄目:編程語言

這篇文章主要介紹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è)資訊頻道!

向AI問一下細(xì)節(jié)

免責(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)容。

AI