您好,登錄后才能下訂單哦!
這篇文章主要介紹java中如何使用正則表達式中的組,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
組是括號劃分的正則表達式,可以根據組的編號來引用某個組。組號為0表示整個表達式,組號1表示從左到右被第一個括號擴起的組,以此類推。
例如:
A(B(CD))E中有三個組:組0是ABCDE,組1是BCD,組2是CD。
Matcher對象提供了一系列方法,用以獲取與組相關的信息:
方法作用
public int groupCount()返回該匹配器的模式中的分組數目,第0組不包括在內 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為模式標記,表示多行模式,在多行模式下,表達式^和$分別匹配一行的開始和結束,也可以匹配輸入字符串的開始和結束 * \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(); } } }
運行結果:
第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()返回所匹配的最后字符的索引加一的值。如果匹配操作失敗后(或先于一個正在進行的匹配操作去操作)調用start()或end()將會產生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為模式標記,表示多行模式,在多行模式下,表達式^和$分別匹配一行的開始和結束,也可以匹配輸入字符串的開始和結束 * \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("結束索引為:"+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("該組的結束索引為:"+m.end(i)); } System.out.println(); } } }
運行結果:
起始索引為:19結束索引為:35 第0組是:[the slithy toves] 該組的起始索引為:19該組的結束索引為:35 第1組是:[the] 該組的起始索引為:19該組的結束索引為:22 第2組是:[slithy toves] 該組的起始索引為:23該組的結束索引為:35 第3組是:[slithy] 該組的起始索引為:23該組的結束索引為:29 第4組是:[toves] 該組的起始索引為:30該組的結束索引為:35 起始索引為:56結束索引為:68 第0組是:[in the wabe.] 該組的起始索引為:56該組的結束索引為:68 第1組是:[in] 該組的起始索引為:56該組的結束索引為:58 第2組是:[the wabe.] 該組的起始索引為:59該組的結束索引為:68 第3組是:[the] 該組的起始索引為:59該組的結束索引為:62 第4組是:[wabe.] 該組的起始索引為:63該組的結束索引為:68 起始索引為:79結束索引為:98 第0組是:[were the borogoves,] 該組的起始索引為:79該組的結束索引為:98 第1組是:[were] 該組的起始索引為:79該組的結束索引為:83 第2組是:[the borogoves,] 該組的起始索引為:84該組的結束索引為:98 第3組是:[the] 該組的起始索引為:84該組的結束索引為:87 第4組是:[borogoves,] 該組的起始索引為:88該組的結束索引為:98
以上是“java中如何使用正則表達式中的組”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。