本文實(shí)例講述了Java使用正則表達(dá)式獲取子文本的方法。分享給大家供大家參考,具體如下:
原來,group是針對()來說的,group(0)就是指的整個串,group(1) 指的是第一個括號里的東西,group(2)指的第二個括號里的東西。
最近學(xué)習(xí)正則表達(dá)式,發(fā)現(xiàn)Java中的一些術(shù)語與其他地方描述的有所差異。就這個問題卡了我半天,坑爹,寫到博客,方便其他新學(xué)的朋友。比如Java正則表達(dá)式中的“組”概念與《正則表達(dá)式必知必會》一書中講述的“子表達(dá)式”其實(shí)是一樣的,只是表述不同而已。由此也引發(fā)了使用JavaAPI時對group(int group)
、start(int group)
、end(int group)
不是太理解。
程序如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
package cn.mingyuan.regexp.singlecharacter; import java.util.regex.Matcher; import java.util.regex.Pattern; public class GroupIndexAndStartEndIndexTest { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub String str = "Hello,World! in Java." ; Pattern pattern = Pattern.compile( "W(or)(ld!)" ); Matcher matcher = pattern.matcher(str); while (matcher.find()){ System.out.println( "Group 0:" +matcher.group( 0 )); //得到第0組——整個匹配 System.out.println( "Group 1:" +matcher.group( 1 )); //得到第一組匹配——與(or)匹配的 System.out.println( "Group 2:" +matcher.group( 2 )); //得到第二組匹配——與(ld!)匹配的,組也就是子表達(dá)式 System.out.println( "Start 0:" +matcher.start( 0 )+ " End 0:" +matcher.end( 0 )); //總匹配的索引 System.out.println( "Start 1:" +matcher.start( 1 )+ " End 1:" +matcher.end( 1 )); //第一組匹配的索引 System.out.println( "Start 2:" +matcher.start( 2 )+ " End 2:" +matcher.end( 2 )); //第二組匹配的索引 System.out.println(str.substring(matcher.start( 0 ),matcher.end( 1 ))); //從總匹配開始索引到第1組匹配的結(jié)束索引之間子串——Wor } } } |
程序的運(yùn)行結(jié)果為:
1
2
3
4
5
6
7
|
Group 0 :World! Group 1 :or Group 2 :ld! Start 0 : 6 End 0 : 12 Start 1 : 7 End 1 : 9 Start 2 : 9 End 2 : 12 Wor |
總結(jié):其實(shí)group(),start(),end()所帶的參數(shù)i就是正則表達(dá)式中的子表達(dá)式索引(第幾個子表達(dá)式),由于剛開始對Java正則表達(dá)式中的組的概念不清晰,導(dǎo)致理解困難。當(dāng)將“組”的概念與“子表達(dá)式”對應(yīng)起來之后,理解matcher的group,start,end就完全沒有障礙了。
希望本文所述對大家java程序設(shè)計(jì)有所幫助。
原文鏈接:http://blog.csdn.net/dackwind/article/details/48738971