blob: c092c0c70973dc45739e98950f889ebd756d5b35 [file] [log] [blame]
J. Duke319a3b92007-12-01 00:00:00 +00001/*
2 * Copyright 2003-2004 Sun Microsystems, Inc. All Rights Reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Sun designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Sun in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
22 * CA 95054 USA or visit www.sun.com if you need additional information or
23 * have any questions.
24 */
25
26package java.util.regex;
27
28/**
29 * The result of a match operation.
30 *
31 * <p>This interface contains query methods used to determine the
32 * results of a match against a regular expression. The match boundaries,
33 * groups and group boundaries can be seen but not modified through
34 * a <code>MatchResult</code>.
35 *
36 * @author Michael McCloskey
37 * @see Matcher
38 * @since 1.5
39 */
40public interface MatchResult {
41
42 /**
43 * Returns the start index of the match.
44 *
45 * @return The index of the first character matched
46 *
47 * @throws IllegalStateException
48 * If no match has yet been attempted,
49 * or if the previous match operation failed
50 */
51 public int start();
52
53 /**
54 * Returns the start index of the subsequence captured by the given group
55 * during this match.
56 *
57 * <p> <a href="Pattern.html#cg">Capturing groups</a> are indexed from left
58 * to right, starting at one. Group zero denotes the entire pattern, so
59 * the expression <i>m.</i><tt>start(0)</tt> is equivalent to
60 * <i>m.</i><tt>start()</tt>. </p>
61 *
62 * @param group
63 * The index of a capturing group in this matcher's pattern
64 *
65 * @return The index of the first character captured by the group,
66 * or <tt>-1</tt> if the match was successful but the group
67 * itself did not match anything
68 *
69 * @throws IllegalStateException
70 * If no match has yet been attempted,
71 * or if the previous match operation failed
72 *
73 * @throws IndexOutOfBoundsException
74 * If there is no capturing group in the pattern
75 * with the given index
76 */
77 public int start(int group);
78
79 /**
80 * Returns the offset after the last character matched. </p>
81 *
82 * @return @return The offset after the last character matched
83 *
84 * @throws IllegalStateException
85 * If no match has yet been attempted,
86 * or if the previous match operation failed
87 */
88 public int end();
89
90 /**
91 * Returns the offset after the last character of the subsequence
92 * captured by the given group during this match.
93 *
94 * <p> <a href="Pattern.html#cg">Capturing groups</a> are indexed from left
95 * to right, starting at one. Group zero denotes the entire pattern, so
96 * the expression <i>m.</i><tt>end(0)</tt> is equivalent to
97 * <i>m.</i><tt>end()</tt>. </p>
98 *
99 * @param group
100 * The index of a capturing group in this matcher's pattern
101 *
102 * @return The offset after the last character captured by the group,
103 * or <tt>-1</tt> if the match was successful
104 * but the group itself did not match anything
105 *
106 * @throws IllegalStateException
107 * If no match has yet been attempted,
108 * or if the previous match operation failed
109 *
110 * @throws IndexOutOfBoundsException
111 * If there is no capturing group in the pattern
112 * with the given index
113 */
114 public int end(int group);
115
116 /**
117 * Returns the input subsequence matched by the previous match.
118 *
119 * <p> For a matcher <i>m</i> with input sequence <i>s</i>,
120 * the expressions <i>m.</i><tt>group()</tt> and
121 * <i>s.</i><tt>substring(</tt><i>m.</i><tt>start(),</tt>&nbsp;<i>m.</i><tt>end())</tt>
122 * are equivalent. </p>
123 *
124 * <p> Note that some patterns, for example <tt>a*</tt>, match the empty
125 * string. This method will return the empty string when the pattern
126 * successfully matches the empty string in the input. </p>
127 *
128 * @return The (possibly empty) subsequence matched by the previous match,
129 * in string form
130 *
131 * @throws IllegalStateException
132 * If no match has yet been attempted,
133 * or if the previous match operation failed
134 */
135 public String group();
136
137 /**
138 * Returns the input subsequence captured by the given group during the
139 * previous match operation.
140 *
141 * <p> For a matcher <i>m</i>, input sequence <i>s</i>, and group index
142 * <i>g</i>, the expressions <i>m.</i><tt>group(</tt><i>g</i><tt>)</tt> and
143 * <i>s.</i><tt>substring(</tt><i>m.</i><tt>start(</tt><i>g</i><tt>),</tt>&nbsp;<i>m.</i><tt>end(</tt><i>g</i><tt>))</tt>
144 * are equivalent. </p>
145 *
146 * <p> <a href="Pattern.html#cg">Capturing groups</a> are indexed from left
147 * to right, starting at one. Group zero denotes the entire pattern, so
148 * the expression <tt>m.group(0)</tt> is equivalent to <tt>m.group()</tt>.
149 * </p>
150 *
151 * <p> If the match was successful but the group specified failed to match
152 * any part of the input sequence, then <tt>null</tt> is returned. Note
153 * that some groups, for example <tt>(a*)</tt>, match the empty string.
154 * This method will return the empty string when such a group successfully
155 * matches the empty string in the input. </p>
156 *
157 * @param group
158 * The index of a capturing group in this matcher's pattern
159 *
160 * @return The (possibly empty) subsequence captured by the group
161 * during the previous match, or <tt>null</tt> if the group
162 * failed to match part of the input
163 *
164 * @throws IllegalStateException
165 * If no match has yet been attempted,
166 * or if the previous match operation failed
167 *
168 * @throws IndexOutOfBoundsException
169 * If there is no capturing group in the pattern
170 * with the given index
171 */
172 public String group(int group);
173
174 /**
175 * Returns the number of capturing groups in this match result's pattern.
176 *
177 * <p> Group zero denotes the entire pattern by convention. It is not
178 * included in this count.
179 *
180 * <p> Any non-negative integer smaller than or equal to the value
181 * returned by this method is guaranteed to be a valid group index for
182 * this matcher. </p>
183 *
184 * @return The number of capturing groups in this matcher's pattern
185 */
186 public int groupCount();
187
188}