src/share/classes/java/util/regex/Matcher.java

Print this page

        

*** 686,696 **** * * </ol> * * <p> The replacement string may contain references to subsequences * captured during the previous match: Each occurrence of ! * <tt>$</tt>&lt;<i>name</i>&gt; or <tt>$</tt><i>g</i> * will be replaced by the result of evaluating the corresponding * {@link #group(String) group(name)} or {@link #group(int) group(g)</tt>} * respectively. For <tt>$</tt><i>g</i><tt></tt>, * the first number after the <tt>$</tt> is always treated as part of * the group reference. Subsequent numbers are incorporated into g if --- 686,696 ---- * * </ol> * * <p> The replacement string may contain references to subsequences * captured during the previous match: Each occurrence of ! * <tt>${</tt><i>name</i><tt>}</tt> or <tt>$</tt><i>g</i> * will be replaced by the result of evaluating the corresponding * {@link #group(String) group(name)} or {@link #group(int) group(g)</tt>} * respectively. For <tt>$</tt><i>g</i><tt></tt>, * the first number after the <tt>$</tt> is always treated as part of * the group reference. Subsequent numbers are incorporated into g if
*** 768,778 **** // this "$" is the last character in replacement // string in current implementation, a IAE might be // more appropriate. nextChar = replacement.charAt(cursor); int refNum = -1; ! if (nextChar == '<') { cursor++; StringBuilder gsb = new StringBuilder(); while (cursor < replacement.length()) { nextChar = replacement.charAt(cursor); if (ASCII.isLower(nextChar) || --- 768,778 ---- // this "$" is the last character in replacement // string in current implementation, a IAE might be // more appropriate. nextChar = replacement.charAt(cursor); int refNum = -1; ! if (nextChar == '{') { cursor++; StringBuilder gsb = new StringBuilder(); while (cursor < replacement.length()) { nextChar = replacement.charAt(cursor); if (ASCII.isLower(nextChar) ||
*** 785,801 **** } } if (gsb.length() == 0) throw new IllegalArgumentException( "named capturing group has 0 length name"); ! if (nextChar != '>') throw new IllegalArgumentException( ! "named capturing group is missing trailing '>'"); String gname = gsb.toString(); if (!parentPattern.namedGroups().containsKey(gname)) throw new IllegalArgumentException( ! "No group with name <" + gname + ">"); refNum = parentPattern.namedGroups().get(gname); cursor++; } else { // The first number is always a group refNum = (int)nextChar - '0'; --- 785,805 ---- } } if (gsb.length() == 0) throw new IllegalArgumentException( "named capturing group has 0 length name"); ! if (nextChar != '}') throw new IllegalArgumentException( ! "named capturing group is missing trailing '}'"); String gname = gsb.toString(); + if (ASCII.isDigit(gname.charAt(0))) + throw new IllegalArgumentException( + "capturing group name {" + gname + + "} starts with digit character"); if (!parentPattern.namedGroups().containsKey(gname)) throw new IllegalArgumentException( ! "No group with name {" + gname + "}"); refNum = parentPattern.namedGroups().get(gname); cursor++; } else { // The first number is always a group refNum = (int)nextChar - '0';