很多正則引擎都支持命名分組,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為正則的完整匹配結果。
下面用一個簡單的正則來分別獲取年月日為例:
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}")); //將年-月-日形式的日期改為日-月-年形式輸出結果
year: 2015month: 10day: 26year: 2015month: 10day: 2626-10-2015
以上就是本文的全部內容,希望對大家的學習有所幫助。