很多正則引擎都支持命名分組,java是在java7中才引入這個特性,語法與.Net類似(.Net允許同一表達式出現名字相同的分組,java不允許)。
命名分組很好理解,就是給分組進行命名。下面簡單演示一下java中如何使用以及注意事項。
1.正則中定義名為NAME的分組
(?<NAME>X)
這里X為我們要匹配的內容,注意,在這個命名不能重復,名字也不能以數字開頭!
2.反向引用NAME組所匹配到的內容
\k<NAME>
注意,反向引用是針對組所匹配到的內容,而非組的表達式。
3.替換中,引用組NAME中捕獲到的字符串
${NAME}
4.獲取NAME組捕獲的字符串
group(String NAME)
注意:也可以使用序號對命名捕獲進行引用,序號從1開始,0為正則的完整匹配結果。
下面用一個簡單的正則來分別獲取年月日為例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
String s = "2015-10-26" ; Pattern p = Pattern.compile( "(?<year>\\d{4})-(?<month>\\d{2})-(?<day>\\d{2})" ); Matcher m = p.matcher(s); if (m.find()) { System.out.println( "year: " + m.group( "year" )); //年 System.out.println( "month: " + m.group( "month" )); //月 System.out.println( "day: " + m.group( "day" )); //日 System.out.println( "year: " + m.group( 1 )); //第一組 System.out.println( "month: " + m.group( 2 )); //第二組 System.out.println( "day: " + m.group( 3 )); //第三組 } System.out.println(s.replaceAll( "(?<year>\\d{4})-(?<month>\\d{2})-(?<day>\\d{2})" , "${day}-${month}-${year}" )); //將 年-月-日 形式的日期改為 日-月-年 形式 |
輸出結果
1
2
3
4
5
6
7
|
year: 2015 month: 10 day: 26 year: 2015 month: 10 day: 26 26 - 10 - 2015 |
以上就是本文的全部內容,希望對大家的學習有所幫助。