80 * <h3><a id="sum">Summary of regular-expression constructs</a></h3> |
80 * <h3><a id="sum">Summary of regular-expression constructs</a></h3> |
81 * |
81 * |
82 * <table border="0" cellpadding="1" cellspacing="0" |
82 * <table border="0" cellpadding="1" cellspacing="0" |
83 * summary="Regular expression constructs, and what they match"> |
83 * summary="Regular expression constructs, and what they match"> |
84 * |
84 * |
85 * <tr align="left"> |
85 * <tr style="text-align:left"> |
86 * <th align="left" id="construct">Construct</th> |
86 * <th style="text-align:left" id="construct">Construct</th> |
87 * <th align="left" id="matches">Matches</th> |
87 * <th style="text-align:left" id="matches">Matches</th> |
88 * </tr> |
88 * </tr> |
89 * |
89 * |
90 * <tr><th> </th></tr> |
90 * <tr><th> </th></tr> |
91 * <tr align="left"><th colspan="2" id="characters">Characters</th></tr> |
91 * <tr style="text-align:left"><th colspan="2" id="characters">Characters</th></tr> |
92 * |
92 * |
93 * <tr><td valign="top" headers="construct characters"><i>x</i></td> |
93 * <tr><td style="vertical-align:top" headers="construct characters"><i>x</i></td> |
94 * <td headers="matches">The character <i>x</i></td></tr> |
94 * <td headers="matches">The character <i>x</i></td></tr> |
95 * <tr><td valign="top" headers="construct characters">{@code \\}</td> |
95 * <tr><td style="vertical-align:top" headers="construct characters">{@code \\}</td> |
96 * <td headers="matches">The backslash character</td></tr> |
96 * <td headers="matches">The backslash character</td></tr> |
97 * <tr><td valign="top" headers="construct characters">{@code \0}<i>n</i></td> |
97 * <tr><td style="vertical-align:top" headers="construct characters">{@code \0}<i>n</i></td> |
98 * <td headers="matches">The character with octal value {@code 0}<i>n</i> |
98 * <td headers="matches">The character with octal value {@code 0}<i>n</i> |
99 * (0 {@code <=} <i>n</i> {@code <=} 7)</td></tr> |
99 * (0 {@code <=} <i>n</i> {@code <=} 7)</td></tr> |
100 * <tr><td valign="top" headers="construct characters">{@code \0}<i>nn</i></td> |
100 * <tr><td style="vertical-align:top" headers="construct characters">{@code \0}<i>nn</i></td> |
101 * <td headers="matches">The character with octal value {@code 0}<i>nn</i> |
101 * <td headers="matches">The character with octal value {@code 0}<i>nn</i> |
102 * (0 {@code <=} <i>n</i> {@code <=} 7)</td></tr> |
102 * (0 {@code <=} <i>n</i> {@code <=} 7)</td></tr> |
103 * <tr><td valign="top" headers="construct characters">{@code \0}<i>mnn</i></td> |
103 * <tr><td style="vertical-align:top" headers="construct characters">{@code \0}<i>mnn</i></td> |
104 * <td headers="matches">The character with octal value {@code 0}<i>mnn</i> |
104 * <td headers="matches">The character with octal value {@code 0}<i>mnn</i> |
105 * (0 {@code <=} <i>m</i> {@code <=} 3, |
105 * (0 {@code <=} <i>m</i> {@code <=} 3, |
106 * 0 {@code <=} <i>n</i> {@code <=} 7)</td></tr> |
106 * 0 {@code <=} <i>n</i> {@code <=} 7)</td></tr> |
107 * <tr><td valign="top" headers="construct characters">{@code \x}<i>hh</i></td> |
107 * <tr><td style="vertical-align:top" headers="construct characters">{@code \x}<i>hh</i></td> |
108 * <td headers="matches">The character with hexadecimal value {@code 0x}<i>hh</i></td></tr> |
108 * <td headers="matches">The character with hexadecimal value {@code 0x}<i>hh</i></td></tr> |
109 * <tr><td valign="top" headers="construct characters"><code>\u</code><i>hhhh</i></td> |
109 * <tr><td style="vertical-align:top" headers="construct characters"><code>\u</code><i>hhhh</i></td> |
110 * <td headers="matches">The character with hexadecimal value {@code 0x}<i>hhhh</i></td></tr> |
110 * <td headers="matches">The character with hexadecimal value {@code 0x}<i>hhhh</i></td></tr> |
111 * <tr><td valign="top" headers="construct characters"><code>\x</code><i>{h...h}</i></td> |
111 * <tr><td style="vertical-align:top" headers="construct characters"><code>\x</code><i>{h...h}</i></td> |
112 * <td headers="matches">The character with hexadecimal value {@code 0x}<i>h...h</i> |
112 * <td headers="matches">The character with hexadecimal value {@code 0x}<i>h...h</i> |
113 * ({@link java.lang.Character#MIN_CODE_POINT Character.MIN_CODE_POINT} |
113 * ({@link java.lang.Character#MIN_CODE_POINT Character.MIN_CODE_POINT} |
114 * <= {@code 0x}<i>h...h</i> <= |
114 * <= {@code 0x}<i>h...h</i> <= |
115 * {@link java.lang.Character#MAX_CODE_POINT Character.MAX_CODE_POINT})</td></tr> |
115 * {@link java.lang.Character#MAX_CODE_POINT Character.MAX_CODE_POINT})</td></tr> |
116 * <tr><td valign="top" headers="construct characters"><code>\N{</code><i>name</i><code>}</code></td> |
116 * <tr><td style="vertical-align:top" headers="construct characters"><code>\N{</code><i>name</i><code>}</code></td> |
117 * <td headers="matches">The character with Unicode character name <i>'name'</i></td></tr> |
117 * <td headers="matches">The character with Unicode character name <i>'name'</i></td></tr> |
118 * <tr><td valign="top" headers="matches">{@code \t}</td> |
118 * <tr><td style="vertical-align:top" headers="matches">{@code \t}</td> |
119 * <td headers="matches">The tab character (<code>'\u0009'</code>)</td></tr> |
119 * <td headers="matches">The tab character (<code>'\u0009'</code>)</td></tr> |
120 * <tr><td valign="top" headers="construct characters">{@code \n}</td> |
120 * <tr><td style="vertical-align:top" headers="construct characters">{@code \n}</td> |
121 * <td headers="matches">The newline (line feed) character (<code>'\u000A'</code>)</td></tr> |
121 * <td headers="matches">The newline (line feed) character (<code>'\u000A'</code>)</td></tr> |
122 * <tr><td valign="top" headers="construct characters">{@code \r}</td> |
122 * <tr><td style="vertical-align:top" headers="construct characters">{@code \r}</td> |
123 * <td headers="matches">The carriage-return character (<code>'\u000D'</code>)</td></tr> |
123 * <td headers="matches">The carriage-return character (<code>'\u000D'</code>)</td></tr> |
124 * <tr><td valign="top" headers="construct characters">{@code \f}</td> |
124 * <tr><td style="vertical-align:top" headers="construct characters">{@code \f}</td> |
125 * <td headers="matches">The form-feed character (<code>'\u000C'</code>)</td></tr> |
125 * <td headers="matches">The form-feed character (<code>'\u000C'</code>)</td></tr> |
126 * <tr><td valign="top" headers="construct characters">{@code \a}</td> |
126 * <tr><td style="vertical-align:top" headers="construct characters">{@code \a}</td> |
127 * <td headers="matches">The alert (bell) character (<code>'\u0007'</code>)</td></tr> |
127 * <td headers="matches">The alert (bell) character (<code>'\u0007'</code>)</td></tr> |
128 * <tr><td valign="top" headers="construct characters">{@code \e}</td> |
128 * <tr><td style="vertical-align:top" headers="construct characters">{@code \e}</td> |
129 * <td headers="matches">The escape character (<code>'\u001B'</code>)</td></tr> |
129 * <td headers="matches">The escape character (<code>'\u001B'</code>)</td></tr> |
130 * <tr><td valign="top" headers="construct characters">{@code \c}<i>x</i></td> |
130 * <tr><td style="vertical-align:top" headers="construct characters">{@code \c}<i>x</i></td> |
131 * <td headers="matches">The control character corresponding to <i>x</i></td></tr> |
131 * <td headers="matches">The control character corresponding to <i>x</i></td></tr> |
132 * |
132 * |
133 * <tr><th> </th></tr> |
133 * <tr><th> </th></tr> |
134 * <tr align="left"><th colspan="2" id="classes">Character classes</th></tr> |
134 * <tr style="text-align:left"><th colspan="2" id="classes">Character classes</th></tr> |
135 * |
135 * |
136 * <tr><td valign="top" headers="construct classes">{@code [abc]}</td> |
136 * <tr><td style="vertical-align:top" headers="construct classes">{@code [abc]}</td> |
137 * <td headers="matches">{@code a}, {@code b}, or {@code c} (simple class)</td></tr> |
137 * <td headers="matches">{@code a}, {@code b}, or {@code c} (simple class)</td></tr> |
138 * <tr><td valign="top" headers="construct classes">{@code [^abc]}</td> |
138 * <tr><td style="vertical-align:top" headers="construct classes">{@code [^abc]}</td> |
139 * <td headers="matches">Any character except {@code a}, {@code b}, or {@code c} (negation)</td></tr> |
139 * <td headers="matches">Any character except {@code a}, {@code b}, or {@code c} (negation)</td></tr> |
140 * <tr><td valign="top" headers="construct classes">{@code [a-zA-Z]}</td> |
140 * <tr><td style="vertical-align:top" headers="construct classes">{@code [a-zA-Z]}</td> |
141 * <td headers="matches">{@code a} through {@code z} |
141 * <td headers="matches">{@code a} through {@code z} |
142 * or {@code A} through {@code Z}, inclusive (range)</td></tr> |
142 * or {@code A} through {@code Z}, inclusive (range)</td></tr> |
143 * <tr><td valign="top" headers="construct classes">{@code [a-d[m-p]]}</td> |
143 * <tr><td style="vertical-align:top" headers="construct classes">{@code [a-d[m-p]]}</td> |
144 * <td headers="matches">{@code a} through {@code d}, |
144 * <td headers="matches">{@code a} through {@code d}, |
145 * or {@code m} through {@code p}: {@code [a-dm-p]} (union)</td></tr> |
145 * or {@code m} through {@code p}: {@code [a-dm-p]} (union)</td></tr> |
146 * <tr><td valign="top" headers="construct classes">{@code [a-z&&[def]]}</td> |
146 * <tr><td style="vertical-align:top" headers="construct classes">{@code [a-z&&[def]]}</td> |
147 * <td headers="matches">{@code d}, {@code e}, or {@code f} (intersection)</tr> |
147 * <td headers="matches">{@code d}, {@code e}, or {@code f} (intersection)</tr> |
148 * <tr><td valign="top" headers="construct classes">{@code [a-z&&[^bc]]}</td> |
148 * <tr><td style="vertical-align:top" headers="construct classes">{@code [a-z&&[^bc]]}</td> |
149 * <td headers="matches">{@code a} through {@code z}, |
149 * <td headers="matches">{@code a} through {@code z}, |
150 * except for {@code b} and {@code c}: {@code [ad-z]} (subtraction)</td></tr> |
150 * except for {@code b} and {@code c}: {@code [ad-z]} (subtraction)</td></tr> |
151 * <tr><td valign="top" headers="construct classes">{@code [a-z&&[^m-p]]}</td> |
151 * <tr><td style="vertical-align:top" headers="construct classes">{@code [a-z&&[^m-p]]}</td> |
152 * <td headers="matches">{@code a} through {@code z}, |
152 * <td headers="matches">{@code a} through {@code z}, |
153 * and not {@code m} through {@code p}: {@code [a-lq-z]}(subtraction)</td></tr> |
153 * and not {@code m} through {@code p}: {@code [a-lq-z]}(subtraction)</td></tr> |
154 * <tr><th> </th></tr> |
154 * <tr><th> </th></tr> |
155 * |
155 * |
156 * <tr align="left"><th colspan="2" id="predef">Predefined character classes</th></tr> |
156 * <tr style="text-align:left"><th colspan="2" id="predef">Predefined character classes</th></tr> |
157 * |
157 * |
158 * <tr><td valign="top" headers="construct predef">{@code .}</td> |
158 * <tr><td style="vertical-align:top" headers="construct predef">{@code .}</td> |
159 * <td headers="matches">Any character (may or may not match <a href="#lt">line terminators</a>)</td></tr> |
159 * <td headers="matches">Any character (may or may not match <a href="#lt">line terminators</a>)</td></tr> |
160 * <tr><td valign="top" headers="construct predef">{@code \d}</td> |
160 * <tr><td style="vertical-align:top" headers="construct predef">{@code \d}</td> |
161 * <td headers="matches">A digit: {@code [0-9]}</td></tr> |
161 * <td headers="matches">A digit: {@code [0-9]}</td></tr> |
162 * <tr><td valign="top" headers="construct predef">{@code \D}</td> |
162 * <tr><td style="vertical-align:top" headers="construct predef">{@code \D}</td> |
163 * <td headers="matches">A non-digit: {@code [^0-9]}</td></tr> |
163 * <td headers="matches">A non-digit: {@code [^0-9]}</td></tr> |
164 * <tr><td valign="top" headers="construct predef">{@code \h}</td> |
164 * <tr><td style="vertical-align:top" headers="construct predef">{@code \h}</td> |
165 * <td headers="matches">A horizontal whitespace character: |
165 * <td headers="matches">A horizontal whitespace character: |
166 * <code>[ \t\xA0\u1680\u180e\u2000-\u200a\u202f\u205f\u3000]</code></td></tr> |
166 * <code>[ \t\xA0\u1680\u180e\u2000-\u200a\u202f\u205f\u3000]</code></td></tr> |
167 * <tr><td valign="top" headers="construct predef">{@code \H}</td> |
167 * <tr><td style="vertical-align:top" headers="construct predef">{@code \H}</td> |
168 * <td headers="matches">A non-horizontal whitespace character: {@code [^\h]}</td></tr> |
168 * <td headers="matches">A non-horizontal whitespace character: {@code [^\h]}</td></tr> |
169 * <tr><td valign="top" headers="construct predef">{@code \s}</td> |
169 * <tr><td style="vertical-align:top" headers="construct predef">{@code \s}</td> |
170 * <td headers="matches">A whitespace character: {@code [ \t\n\x0B\f\r]}</td></tr> |
170 * <td headers="matches">A whitespace character: {@code [ \t\n\x0B\f\r]}</td></tr> |
171 * <tr><td valign="top" headers="construct predef">{@code \S}</td> |
171 * <tr><td style="vertical-align:top" headers="construct predef">{@code \S}</td> |
172 * <td headers="matches">A non-whitespace character: {@code [^\s]}</td></tr> |
172 * <td headers="matches">A non-whitespace character: {@code [^\s]}</td></tr> |
173 * <tr><td valign="top" headers="construct predef">{@code \v}</td> |
173 * <tr><td style="vertical-align:top" headers="construct predef">{@code \v}</td> |
174 * <td headers="matches">A vertical whitespace character: <code>[\n\x0B\f\r\x85\u2028\u2029]</code> |
174 * <td headers="matches">A vertical whitespace character: <code>[\n\x0B\f\r\x85\u2028\u2029]</code> |
175 * </td></tr> |
175 * </td></tr> |
176 * <tr><td valign="top" headers="construct predef">{@code \V}</td> |
176 * <tr><td style="vertical-align:top" headers="construct predef">{@code \V}</td> |
177 * <td headers="matches">A non-vertical whitespace character: {@code [^\v]}</td></tr> |
177 * <td headers="matches">A non-vertical whitespace character: {@code [^\v]}</td></tr> |
178 * <tr><td valign="top" headers="construct predef">{@code \w}</td> |
178 * <tr><td style="vertical-align:top" headers="construct predef">{@code \w}</td> |
179 * <td headers="matches">A word character: {@code [a-zA-Z_0-9]}</td></tr> |
179 * <td headers="matches">A word character: {@code [a-zA-Z_0-9]}</td></tr> |
180 * <tr><td valign="top" headers="construct predef">{@code \W}</td> |
180 * <tr><td style="vertical-align:top" headers="construct predef">{@code \W}</td> |
181 * <td headers="matches">A non-word character: {@code [^\w]}</td></tr> |
181 * <td headers="matches">A non-word character: {@code [^\w]}</td></tr> |
182 * <tr><th> </th></tr> |
182 * <tr><th> </th></tr> |
183 * <tr align="left"><th colspan="2" id="posix"><b>POSIX character classes (US-ASCII only)</b></th></tr> |
183 * <tr style="text-align:left"><th colspan="2" id="posix"><b>POSIX character classes (US-ASCII only)</b></th></tr> |
184 * |
184 * |
185 * <tr><td valign="top" headers="construct posix">{@code \p{Lower}}</td> |
185 * <tr><td style="vertical-align:top" headers="construct posix">{@code \p{Lower}}</td> |
186 * <td headers="matches">A lower-case alphabetic character: {@code [a-z]}</td></tr> |
186 * <td headers="matches">A lower-case alphabetic character: {@code [a-z]}</td></tr> |
187 * <tr><td valign="top" headers="construct posix">{@code \p{Upper}}</td> |
187 * <tr><td style="vertical-align:top" headers="construct posix">{@code \p{Upper}}</td> |
188 * <td headers="matches">An upper-case alphabetic character:{@code [A-Z]}</td></tr> |
188 * <td headers="matches">An upper-case alphabetic character:{@code [A-Z]}</td></tr> |
189 * <tr><td valign="top" headers="construct posix">{@code \p{ASCII}}</td> |
189 * <tr><td style="vertical-align:top" headers="construct posix">{@code \p{ASCII}}</td> |
190 * <td headers="matches">All ASCII:{@code [\x00-\x7F]}</td></tr> |
190 * <td headers="matches">All ASCII:{@code [\x00-\x7F]}</td></tr> |
191 * <tr><td valign="top" headers="construct posix">{@code \p{Alpha}}</td> |
191 * <tr><td style="vertical-align:top" headers="construct posix">{@code \p{Alpha}}</td> |
192 * <td headers="matches">An alphabetic character:{@code [\p{Lower}\p{Upper}]}</td></tr> |
192 * <td headers="matches">An alphabetic character:{@code [\p{Lower}\p{Upper}]}</td></tr> |
193 * <tr><td valign="top" headers="construct posix">{@code \p{Digit}}</td> |
193 * <tr><td style="vertical-align:top" headers="construct posix">{@code \p{Digit}}</td> |
194 * <td headers="matches">A decimal digit: {@code [0-9]}</td></tr> |
194 * <td headers="matches">A decimal digit: {@code [0-9]}</td></tr> |
195 * <tr><td valign="top" headers="construct posix">{@code \p{Alnum}}</td> |
195 * <tr><td style="vertical-align:top" headers="construct posix">{@code \p{Alnum}}</td> |
196 * <td headers="matches">An alphanumeric character:{@code [\p{Alpha}\p{Digit}]}</td></tr> |
196 * <td headers="matches">An alphanumeric character:{@code [\p{Alpha}\p{Digit}]}</td></tr> |
197 * <tr><td valign="top" headers="construct posix">{@code \p{Punct}}</td> |
197 * <tr><td style="vertical-align:top" headers="construct posix">{@code \p{Punct}}</td> |
198 * <td headers="matches">Punctuation: One of {@code !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~}</td></tr> |
198 * <td headers="matches">Punctuation: One of {@code !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~}</td></tr> |
199 * <!-- {@code [\!"#\$%&'\(\)\*\+,\-\./:;\<=\>\?@\[\\\]\^_`\{\|\}~]} |
199 * <!-- {@code [\!"#\$%&'\(\)\*\+,\-\./:;\<=\>\?@\[\\\]\^_`\{\|\}~]} |
200 * {@code [\X21-\X2F\X31-\X40\X5B-\X60\X7B-\X7E]} --> |
200 * {@code [\X21-\X2F\X31-\X40\X5B-\X60\X7B-\X7E]} --> |
201 * <tr><td valign="top" headers="construct posix">{@code \p{Graph}}</td> |
201 * <tr><td style="vertical-align:top" headers="construct posix">{@code \p{Graph}}</td> |
202 * <td headers="matches">A visible character: {@code [\p{Alnum}\p{Punct}]}</td></tr> |
202 * <td headers="matches">A visible character: {@code [\p{Alnum}\p{Punct}]}</td></tr> |
203 * <tr><td valign="top" headers="construct posix">{@code \p{Print}}</td> |
203 * <tr><td style="vertical-align:top" headers="construct posix">{@code \p{Print}}</td> |
204 * <td headers="matches">A printable character: {@code [\p{Graph}\x20]}</td></tr> |
204 * <td headers="matches">A printable character: {@code [\p{Graph}\x20]}</td></tr> |
205 * <tr><td valign="top" headers="construct posix">{@code \p{Blank}}</td> |
205 * <tr><td style="vertical-align:top" headers="construct posix">{@code \p{Blank}}</td> |
206 * <td headers="matches">A space or a tab: {@code [ \t]}</td></tr> |
206 * <td headers="matches">A space or a tab: {@code [ \t]}</td></tr> |
207 * <tr><td valign="top" headers="construct posix">{@code \p{Cntrl}}</td> |
207 * <tr><td style="vertical-align:top" headers="construct posix">{@code \p{Cntrl}}</td> |
208 * <td headers="matches">A control character: {@code [\x00-\x1F\x7F]}</td></tr> |
208 * <td headers="matches">A control character: {@code [\x00-\x1F\x7F]}</td></tr> |
209 * <tr><td valign="top" headers="construct posix">{@code \p{XDigit}}</td> |
209 * <tr><td style="vertical-align:top" headers="construct posix">{@code \p{XDigit}}</td> |
210 * <td headers="matches">A hexadecimal digit: {@code [0-9a-fA-F]}</td></tr> |
210 * <td headers="matches">A hexadecimal digit: {@code [0-9a-fA-F]}</td></tr> |
211 * <tr><td valign="top" headers="construct posix">{@code \p{Space}}</td> |
211 * <tr><td style="vertical-align:top" headers="construct posix">{@code \p{Space}}</td> |
212 * <td headers="matches">A whitespace character: {@code [ \t\n\x0B\f\r]}</td></tr> |
212 * <td headers="matches">A whitespace character: {@code [ \t\n\x0B\f\r]}</td></tr> |
213 * |
213 * |
214 * <tr><th> </th></tr> |
214 * <tr><th> </th></tr> |
215 * <tr align="left"><th colspan="2">java.lang.Character classes (simple <a href="#jcc">java character type</a>)</th></tr> |
215 * <tr style="text-align:left"><th colspan="2">java.lang.Character classes (simple <a href="#jcc">java character type</a>)</th></tr> |
216 * |
216 * |
217 * <tr><td valign="top">{@code \p{javaLowerCase}}</td> |
217 * <tr><td style="vertical-align:top">{@code \p{javaLowerCase}}</td> |
218 * <td>Equivalent to java.lang.Character.isLowerCase()</td></tr> |
218 * <td>Equivalent to java.lang.Character.isLowerCase()</td></tr> |
219 * <tr><td valign="top">{@code \p{javaUpperCase}}</td> |
219 * <tr><td style="vertical-align:top">{@code \p{javaUpperCase}}</td> |
220 * <td>Equivalent to java.lang.Character.isUpperCase()</td></tr> |
220 * <td>Equivalent to java.lang.Character.isUpperCase()</td></tr> |
221 * <tr><td valign="top">{@code \p{javaWhitespace}}</td> |
221 * <tr><td style="vertical-align:top">{@code \p{javaWhitespace}}</td> |
222 * <td>Equivalent to java.lang.Character.isWhitespace()</td></tr> |
222 * <td>Equivalent to java.lang.Character.isWhitespace()</td></tr> |
223 * <tr><td valign="top">{@code \p{javaMirrored}}</td> |
223 * <tr><td style="vertical-align:top">{@code \p{javaMirrored}}</td> |
224 * <td>Equivalent to java.lang.Character.isMirrored()</td></tr> |
224 * <td>Equivalent to java.lang.Character.isMirrored()</td></tr> |
225 * |
225 * |
226 * <tr><th> </th></tr> |
226 * <tr><th> </th></tr> |
227 * <tr align="left"><th colspan="2" id="unicode">Classes for Unicode scripts, blocks, categories and binary properties</th></tr> |
227 * <tr style="text-align:left"><th colspan="2" id="unicode">Classes for Unicode scripts, blocks, categories and binary properties</th></tr> |
228 * <tr><td valign="top" headers="construct unicode">{@code \p{IsLatin}}</td> |
228 * <tr><td style="vertical-align:top" headers="construct unicode">{@code \p{IsLatin}}</td> |
229 * <td headers="matches">A Latin script character (<a href="#usc">script</a>)</td></tr> |
229 * <td headers="matches">A Latin script character (<a href="#usc">script</a>)</td></tr> |
230 * <tr><td valign="top" headers="construct unicode">{@code \p{InGreek}}</td> |
230 * <tr><td style="vertical-align:top" headers="construct unicode">{@code \p{InGreek}}</td> |
231 * <td headers="matches">A character in the Greek block (<a href="#ubc">block</a>)</td></tr> |
231 * <td headers="matches">A character in the Greek block (<a href="#ubc">block</a>)</td></tr> |
232 * <tr><td valign="top" headers="construct unicode">{@code \p{Lu}}</td> |
232 * <tr><td style="vertical-align:top" headers="construct unicode">{@code \p{Lu}}</td> |
233 * <td headers="matches">An uppercase letter (<a href="#ucc">category</a>)</td></tr> |
233 * <td headers="matches">An uppercase letter (<a href="#ucc">category</a>)</td></tr> |
234 * <tr><td valign="top" headers="construct unicode">{@code \p{IsAlphabetic}}</td> |
234 * <tr><td style="vertical-align:top" headers="construct unicode">{@code \p{IsAlphabetic}}</td> |
235 * <td headers="matches">An alphabetic character (<a href="#ubpc">binary property</a>)</td></tr> |
235 * <td headers="matches">An alphabetic character (<a href="#ubpc">binary property</a>)</td></tr> |
236 * <tr><td valign="top" headers="construct unicode">{@code \p{Sc}}</td> |
236 * <tr><td style="vertical-align:top" headers="construct unicode">{@code \p{Sc}}</td> |
237 * <td headers="matches">A currency symbol</td></tr> |
237 * <td headers="matches">A currency symbol</td></tr> |
238 * <tr><td valign="top" headers="construct unicode">{@code \P{InGreek}}</td> |
238 * <tr><td style="vertical-align:top" headers="construct unicode">{@code \P{InGreek}}</td> |
239 * <td headers="matches">Any character except one in the Greek block (negation)</td></tr> |
239 * <td headers="matches">Any character except one in the Greek block (negation)</td></tr> |
240 * <tr><td valign="top" headers="construct unicode">{@code [\p{L}&&[^\p{Lu}]]}</td> |
240 * <tr><td style="vertical-align:top" headers="construct unicode">{@code [\p{L}&&[^\p{Lu}]]}</td> |
241 * <td headers="matches">Any letter except an uppercase letter (subtraction)</td></tr> |
241 * <td headers="matches">Any letter except an uppercase letter (subtraction)</td></tr> |
242 * |
242 * |
243 * <tr><th> </th></tr> |
243 * <tr><th> </th></tr> |
244 * <tr align="left"><th colspan="2" id="bounds">Boundary matchers</th></tr> |
244 * <tr style="text-align:left"><th colspan="2" id="bounds">Boundary matchers</th></tr> |
245 * |
245 * |
246 * <tr><td valign="top" headers="construct bounds">{@code ^}</td> |
246 * <tr><td style="vertical-align:top" headers="construct bounds">{@code ^}</td> |
247 * <td headers="matches">The beginning of a line</td></tr> |
247 * <td headers="matches">The beginning of a line</td></tr> |
248 * <tr><td valign="top" headers="construct bounds">{@code $}</td> |
248 * <tr><td style="vertical-align:top" headers="construct bounds">{@code $}</td> |
249 * <td headers="matches">The end of a line</td></tr> |
249 * <td headers="matches">The end of a line</td></tr> |
250 * <tr><td valign="top" headers="construct bounds">{@code \b}</td> |
250 * <tr><td style="vertical-align:top" headers="construct bounds">{@code \b}</td> |
251 * <td headers="matches">A word boundary</td></tr> |
251 * <td headers="matches">A word boundary</td></tr> |
252 * <tr><td valign="top" headers="construct bounds">{@code \b{g}}</td> |
252 * <tr><td style="vertical-align:top" headers="construct bounds">{@code \b{g}}</td> |
253 * <td headers="matches">A Unicode extended grapheme cluster boundary</td></tr> |
253 * <td headers="matches">A Unicode extended grapheme cluster boundary</td></tr> |
254 * <tr><td valign="top" headers="construct bounds">{@code \B}</td> |
254 * <tr><td style="vertical-align:top" headers="construct bounds">{@code \B}</td> |
255 * <td headers="matches">A non-word boundary</td></tr> |
255 * <td headers="matches">A non-word boundary</td></tr> |
256 * <tr><td valign="top" headers="construct bounds">{@code \A}</td> |
256 * <tr><td style="vertical-align:top" headers="construct bounds">{@code \A}</td> |
257 * <td headers="matches">The beginning of the input</td></tr> |
257 * <td headers="matches">The beginning of the input</td></tr> |
258 * <tr><td valign="top" headers="construct bounds">{@code \G}</td> |
258 * <tr><td style="vertical-align:top" headers="construct bounds">{@code \G}</td> |
259 * <td headers="matches">The end of the previous match</td></tr> |
259 * <td headers="matches">The end of the previous match</td></tr> |
260 * <tr><td valign="top" headers="construct bounds">{@code \Z}</td> |
260 * <tr><td style="vertical-align:top" headers="construct bounds">{@code \Z}</td> |
261 * <td headers="matches">The end of the input but for the final |
261 * <td headers="matches">The end of the input but for the final |
262 * <a href="#lt">terminator</a>, if any</td></tr> |
262 * <a href="#lt">terminator</a>, if any</td></tr> |
263 * <tr><td valign="top" headers="construct bounds">{@code \z}</td> |
263 * <tr><td style="vertical-align:top" headers="construct bounds">{@code \z}</td> |
264 * <td headers="matches">The end of the input</td></tr> |
264 * <td headers="matches">The end of the input</td></tr> |
265 * |
265 * |
266 * <tr><th> </th></tr> |
266 * <tr><th> </th></tr> |
267 * <tr align="left"><th colspan="2" id="lineending">Linebreak matcher</th></tr> |
267 * <tr style="text-align:left"><th colspan="2" id="lineending">Linebreak matcher</th></tr> |
268 * <tr><td valign="top" headers="construct lineending">{@code \R}</td> |
268 * <tr><td style="vertical-align:top" headers="construct lineending">{@code \R}</td> |
269 * <td headers="matches">Any Unicode linebreak sequence, is equivalent to |
269 * <td headers="matches">Any Unicode linebreak sequence, is equivalent to |
270 * <code>\u000D\u000A|[\u000A\u000B\u000C\u000D\u0085\u2028\u2029] |
270 * <code>\u000D\u000A|[\u000A\u000B\u000C\u000D\u0085\u2028\u2029] |
271 * </code></td></tr> |
271 * </code></td></tr> |
272 * |
272 * |
273 * <tr><th> </th></tr> |
273 * <tr><th> </th></tr> |
274 * <tr align="left"><th colspan="2" id="grapheme">Unicode Extended Grapheme matcher</th></tr> |
274 * <tr style="text-align:left"><th colspan="2" id="grapheme">Unicode Extended Grapheme matcher</th></tr> |
275 * <tr><td valign="top" headers="construct grapheme">{@code \X}</td> |
275 * <tr><td style="vertical-align:top" headers="construct grapheme">{@code \X}</td> |
276 * <td headers="matches">Any Unicode extended grapheme cluster</td></tr> |
276 * <td headers="matches">Any Unicode extended grapheme cluster</td></tr> |
277 * |
277 * |
278 * <tr><th> </th></tr> |
278 * <tr><th> </th></tr> |
279 * <tr align="left"><th colspan="2" id="greedy">Greedy quantifiers</th></tr> |
279 * <tr style="text-align:left"><th colspan="2" id="greedy">Greedy quantifiers</th></tr> |
280 * |
280 * |
281 * <tr><td valign="top" headers="construct greedy"><i>X</i>{@code ?}</td> |
281 * <tr><td style="vertical-align:top" headers="construct greedy"><i>X</i>{@code ?}</td> |
282 * <td headers="matches"><i>X</i>, once or not at all</td></tr> |
282 * <td headers="matches"><i>X</i>, once or not at all</td></tr> |
283 * <tr><td valign="top" headers="construct greedy"><i>X</i>{@code *}</td> |
283 * <tr><td style="vertical-align:top" headers="construct greedy"><i>X</i>{@code *}</td> |
284 * <td headers="matches"><i>X</i>, zero or more times</td></tr> |
284 * <td headers="matches"><i>X</i>, zero or more times</td></tr> |
285 * <tr><td valign="top" headers="construct greedy"><i>X</i>{@code +}</td> |
285 * <tr><td style="vertical-align:top" headers="construct greedy"><i>X</i>{@code +}</td> |
286 * <td headers="matches"><i>X</i>, one or more times</td></tr> |
286 * <td headers="matches"><i>X</i>, one or more times</td></tr> |
287 * <tr><td valign="top" headers="construct greedy"><i>X</i><code>{</code><i>n</i><code>}</code></td> |
287 * <tr><td style="vertical-align:top" headers="construct greedy"><i>X</i><code>{</code><i>n</i><code>}</code></td> |
288 * <td headers="matches"><i>X</i>, exactly <i>n</i> times</td></tr> |
288 * <td headers="matches"><i>X</i>, exactly <i>n</i> times</td></tr> |
289 * <tr><td valign="top" headers="construct greedy"><i>X</i><code>{</code><i>n</i>{@code ,}}</td> |
289 * <tr><td style="vertical-align:top" headers="construct greedy"><i>X</i><code>{</code><i>n</i>{@code ,}}</td> |
290 * <td headers="matches"><i>X</i>, at least <i>n</i> times</td></tr> |
290 * <td headers="matches"><i>X</i>, at least <i>n</i> times</td></tr> |
291 * <tr><td valign="top" headers="construct greedy"><i>X</i><code>{</code><i>n</i>{@code ,}<i>m</i><code>}</code></td> |
291 * <tr><td style="vertical-align:top" headers="construct greedy"><i>X</i><code>{</code><i>n</i>{@code ,}<i>m</i><code>}</code></td> |
292 * <td headers="matches"><i>X</i>, at least <i>n</i> but not more than <i>m</i> times</td></tr> |
292 * <td headers="matches"><i>X</i>, at least <i>n</i> but not more than <i>m</i> times</td></tr> |
293 * |
293 * |
294 * <tr><th> </th></tr> |
294 * <tr><th> </th></tr> |
295 * <tr align="left"><th colspan="2" id="reluc">Reluctant quantifiers</th></tr> |
295 * <tr style="text-align:left"><th colspan="2" id="reluc">Reluctant quantifiers</th></tr> |
296 * |
296 * |
297 * <tr><td valign="top" headers="construct reluc"><i>X</i>{@code ??}</td> |
297 * <tr><td style="vertical-align:top" headers="construct reluc"><i>X</i>{@code ??}</td> |
298 * <td headers="matches"><i>X</i>, once or not at all</td></tr> |
298 * <td headers="matches"><i>X</i>, once or not at all</td></tr> |
299 * <tr><td valign="top" headers="construct reluc"><i>X</i>{@code *?}</td> |
299 * <tr><td style="vertical-align:top" headers="construct reluc"><i>X</i>{@code *?}</td> |
300 * <td headers="matches"><i>X</i>, zero or more times</td></tr> |
300 * <td headers="matches"><i>X</i>, zero or more times</td></tr> |
301 * <tr><td valign="top" headers="construct reluc"><i>X</i>{@code +?}</td> |
301 * <tr><td style="vertical-align:top" headers="construct reluc"><i>X</i>{@code +?}</td> |
302 * <td headers="matches"><i>X</i>, one or more times</td></tr> |
302 * <td headers="matches"><i>X</i>, one or more times</td></tr> |
303 * <tr><td valign="top" headers="construct reluc"><i>X</i><code>{</code><i>n</i><code>}?</code></td> |
303 * <tr><td style="vertical-align:top" headers="construct reluc"><i>X</i><code>{</code><i>n</i><code>}?</code></td> |
304 * <td headers="matches"><i>X</i>, exactly <i>n</i> times</td></tr> |
304 * <td headers="matches"><i>X</i>, exactly <i>n</i> times</td></tr> |
305 * <tr><td valign="top" headers="construct reluc"><i>X</i><code>{</code><i>n</i><code>,}?</code></td> |
305 * <tr><td style="vertical-align:top" headers="construct reluc"><i>X</i><code>{</code><i>n</i><code>,}?</code></td> |
306 * <td headers="matches"><i>X</i>, at least <i>n</i> times</td></tr> |
306 * <td headers="matches"><i>X</i>, at least <i>n</i> times</td></tr> |
307 * <tr><td valign="top" headers="construct reluc"><i>X</i><code>{</code><i>n</i>{@code ,}<i>m</i><code>}?</code></td> |
307 * <tr><td style="vertical-align:top" headers="construct reluc"><i>X</i><code>{</code><i>n</i>{@code ,}<i>m</i><code>}?</code></td> |
308 * <td headers="matches"><i>X</i>, at least <i>n</i> but not more than <i>m</i> times</td></tr> |
308 * <td headers="matches"><i>X</i>, at least <i>n</i> but not more than <i>m</i> times</td></tr> |
309 * |
309 * |
310 * <tr><th> </th></tr> |
310 * <tr><th> </th></tr> |
311 * <tr align="left"><th colspan="2" id="poss">Possessive quantifiers</th></tr> |
311 * <tr style="text-align:left"><th colspan="2" id="poss">Possessive quantifiers</th></tr> |
312 * |
312 * |
313 * <tr><td valign="top" headers="construct poss"><i>X</i>{@code ?+}</td> |
313 * <tr><td style="vertical-align:top" headers="construct poss"><i>X</i>{@code ?+}</td> |
314 * <td headers="matches"><i>X</i>, once or not at all</td></tr> |
314 * <td headers="matches"><i>X</i>, once or not at all</td></tr> |
315 * <tr><td valign="top" headers="construct poss"><i>X</i>{@code *+}</td> |
315 * <tr><td style="vertical-align:top" headers="construct poss"><i>X</i>{@code *+}</td> |
316 * <td headers="matches"><i>X</i>, zero or more times</td></tr> |
316 * <td headers="matches"><i>X</i>, zero or more times</td></tr> |
317 * <tr><td valign="top" headers="construct poss"><i>X</i>{@code ++}</td> |
317 * <tr><td style="vertical-align:top" headers="construct poss"><i>X</i>{@code ++}</td> |
318 * <td headers="matches"><i>X</i>, one or more times</td></tr> |
318 * <td headers="matches"><i>X</i>, one or more times</td></tr> |
319 * <tr><td valign="top" headers="construct poss"><i>X</i><code>{</code><i>n</i><code>}+</code></td> |
319 * <tr><td style="vertical-align:top" headers="construct poss"><i>X</i><code>{</code><i>n</i><code>}+</code></td> |
320 * <td headers="matches"><i>X</i>, exactly <i>n</i> times</td></tr> |
320 * <td headers="matches"><i>X</i>, exactly <i>n</i> times</td></tr> |
321 * <tr><td valign="top" headers="construct poss"><i>X</i><code>{</code><i>n</i><code>,}+</code></td> |
321 * <tr><td style="vertical-align:top" headers="construct poss"><i>X</i><code>{</code><i>n</i><code>,}+</code></td> |
322 * <td headers="matches"><i>X</i>, at least <i>n</i> times</td></tr> |
322 * <td headers="matches"><i>X</i>, at least <i>n</i> times</td></tr> |
323 * <tr><td valign="top" headers="construct poss"><i>X</i><code>{</code><i>n</i>{@code ,}<i>m</i><code>}+</code></td> |
323 * <tr><td style="vertical-align:top" headers="construct poss"><i>X</i><code>{</code><i>n</i>{@code ,}<i>m</i><code>}+</code></td> |
324 * <td headers="matches"><i>X</i>, at least <i>n</i> but not more than <i>m</i> times</td></tr> |
324 * <td headers="matches"><i>X</i>, at least <i>n</i> but not more than <i>m</i> times</td></tr> |
325 * |
325 * |
326 * <tr><th> </th></tr> |
326 * <tr><th> </th></tr> |
327 * <tr align="left"><th colspan="2" id="logical">Logical operators</th></tr> |
327 * <tr style="text-align:left"><th colspan="2" id="logical">Logical operators</th></tr> |
328 * |
328 * |
329 * <tr><td valign="top" headers="construct logical"><i>XY</i></td> |
329 * <tr><td style="vertical-align:top" headers="construct logical"><i>XY</i></td> |
330 * <td headers="matches"><i>X</i> followed by <i>Y</i></td></tr> |
330 * <td headers="matches"><i>X</i> followed by <i>Y</i></td></tr> |
331 * <tr><td valign="top" headers="construct logical"><i>X</i>{@code |}<i>Y</i></td> |
331 * <tr><td style="vertical-align:top" headers="construct logical"><i>X</i>{@code |}<i>Y</i></td> |
332 * <td headers="matches">Either <i>X</i> or <i>Y</i></td></tr> |
332 * <td headers="matches">Either <i>X</i> or <i>Y</i></td></tr> |
333 * <tr><td valign="top" headers="construct logical">{@code (}<i>X</i>{@code )}</td> |
333 * <tr><td style="vertical-align:top" headers="construct logical">{@code (}<i>X</i>{@code )}</td> |
334 * <td headers="matches">X, as a <a href="#cg">capturing group</a></td></tr> |
334 * <td headers="matches">X, as a <a href="#cg">capturing group</a></td></tr> |
335 * |
335 * |
336 * <tr><th> </th></tr> |
336 * <tr><th> </th></tr> |
337 * <tr align="left"><th colspan="2" id="backref">Back references</th></tr> |
337 * <tr style="text-align:left"><th colspan="2" id="backref">Back references</th></tr> |
338 * |
338 * |
339 * <tr><td valign="bottom" headers="construct backref">{@code \}<i>n</i></td> |
339 * <tr><td style="vertical-align:bottom" headers="construct backref">{@code \}<i>n</i></td> |
340 * <td valign="bottom" headers="matches">Whatever the <i>n</i><sup>th</sup> |
340 * <td style="vertical-align:bottom" headers="matches">Whatever the <i>n</i><sup>th</sup> |
341 * <a href="#cg">capturing group</a> matched</td></tr> |
341 * <a href="#cg">capturing group</a> matched</td></tr> |
342 * |
342 * |
343 * <tr><td valign="bottom" headers="construct backref">{@code \}<i>k</i><<i>name</i>></td> |
343 * <tr><td style="vertical-align:bottom" headers="construct backref">{@code \}<i>k</i><<i>name</i>></td> |
344 * <td valign="bottom" headers="matches">Whatever the |
344 * <td style="vertical-align:bottom" headers="matches">Whatever the |
345 * <a href="#groupname">named-capturing group</a> "name" matched</td></tr> |
345 * <a href="#groupname">named-capturing group</a> "name" matched</td></tr> |
346 * |
346 * |
347 * <tr><th> </th></tr> |
347 * <tr><th> </th></tr> |
348 * <tr align="left"><th colspan="2" id="quot">Quotation</th></tr> |
348 * <tr style="text-align:left"><th colspan="2" id="quot">Quotation</th></tr> |
349 * |
349 * |
350 * <tr><td valign="top" headers="construct quot">{@code \}</td> |
350 * <tr><td style="vertical-align:top" headers="construct quot">{@code \}</td> |
351 * <td headers="matches">Nothing, but quotes the following character</td></tr> |
351 * <td headers="matches">Nothing, but quotes the following character</td></tr> |
352 * <tr><td valign="top" headers="construct quot">{@code \Q}</td> |
352 * <tr><td style="vertical-align:top" headers="construct quot">{@code \Q}</td> |
353 * <td headers="matches">Nothing, but quotes all characters until {@code \E}</td></tr> |
353 * <td headers="matches">Nothing, but quotes all characters until {@code \E}</td></tr> |
354 * <tr><td valign="top" headers="construct quot">{@code \E}</td> |
354 * <tr><td style="vertical-align:top" headers="construct quot">{@code \E}</td> |
355 * <td headers="matches">Nothing, but ends quoting started by {@code \Q}</td></tr> |
355 * <td headers="matches">Nothing, but ends quoting started by {@code \Q}</td></tr> |
356 * <!-- Metachars: !$()*+.<>?[\]^{|} --> |
356 * <!-- Metachars: !$()*+.<>?[\]^{|} --> |
357 * |
357 * |
358 * <tr><th> </th></tr> |
358 * <tr><th> </th></tr> |
359 * <tr align="left"><th colspan="2" id="special">Special constructs (named-capturing and non-capturing)</th></tr> |
359 * <tr style="text-align:left"><th colspan="2" id="special">Special constructs (named-capturing and non-capturing)</th></tr> |
360 * |
360 * |
361 * <tr><td valign="top" headers="construct special"><code>(?<<a href="#groupname">name</a>></code><i>X</i>{@code )}</td> |
361 * <tr><td style="vertical-align:top" headers="construct special"><code>(?<<a href="#groupname">name</a>></code><i>X</i>{@code )}</td> |
362 * <td headers="matches"><i>X</i>, as a named-capturing group</td></tr> |
362 * <td headers="matches"><i>X</i>, as a named-capturing group</td></tr> |
363 * <tr><td valign="top" headers="construct special">{@code (?:}<i>X</i>{@code )}</td> |
363 * <tr><td style="vertical-align:top" headers="construct special">{@code (?:}<i>X</i>{@code )}</td> |
364 * <td headers="matches"><i>X</i>, as a non-capturing group</td></tr> |
364 * <td headers="matches"><i>X</i>, as a non-capturing group</td></tr> |
365 * <tr><td valign="top" headers="construct special"><code>(?idmsuxU-idmsuxU) </code></td> |
365 * <tr><td style="vertical-align:top" headers="construct special"><code>(?idmsuxU-idmsuxU) </code></td> |
366 * <td headers="matches">Nothing, but turns match flags <a href="#CASE_INSENSITIVE">i</a> |
366 * <td headers="matches">Nothing, but turns match flags <a href="#CASE_INSENSITIVE">i</a> |
367 * <a href="#UNIX_LINES">d</a> <a href="#MULTILINE">m</a> <a href="#DOTALL">s</a> |
367 * <a href="#UNIX_LINES">d</a> <a href="#MULTILINE">m</a> <a href="#DOTALL">s</a> |
368 * <a href="#UNICODE_CASE">u</a> <a href="#COMMENTS">x</a> <a href="#UNICODE_CHARACTER_CLASS">U</a> |
368 * <a href="#UNICODE_CASE">u</a> <a href="#COMMENTS">x</a> <a href="#UNICODE_CHARACTER_CLASS">U</a> |
369 * on - off</td></tr> |
369 * on - off</td></tr> |
370 * <tr><td valign="top" headers="construct special"><code>(?idmsux-idmsux:</code><i>X</i>{@code )} </td> |
370 * <tr><td style="vertical-align:top" headers="construct special"><code>(?idmsux-idmsux:</code><i>X</i>{@code )} </td> |
371 * <td headers="matches"><i>X</i>, as a <a href="#cg">non-capturing group</a> with the |
371 * <td headers="matches"><i>X</i>, as a <a href="#cg">non-capturing group</a> with the |
372 * given flags <a href="#CASE_INSENSITIVE">i</a> <a href="#UNIX_LINES">d</a> |
372 * given flags <a href="#CASE_INSENSITIVE">i</a> <a href="#UNIX_LINES">d</a> |
373 * <a href="#MULTILINE">m</a> <a href="#DOTALL">s</a> <a href="#UNICODE_CASE">u</a > |
373 * <a href="#MULTILINE">m</a> <a href="#DOTALL">s</a> <a href="#UNICODE_CASE">u</a > |
374 * <a href="#COMMENTS">x</a> on - off</td></tr> |
374 * <a href="#COMMENTS">x</a> on - off</td></tr> |
375 * <tr><td valign="top" headers="construct special">{@code (?=}<i>X</i>{@code )}</td> |
375 * <tr><td style="vertical-align:top" headers="construct special">{@code (?=}<i>X</i>{@code )}</td> |
376 * <td headers="matches"><i>X</i>, via zero-width positive lookahead</td></tr> |
376 * <td headers="matches"><i>X</i>, via zero-width positive lookahead</td></tr> |
377 * <tr><td valign="top" headers="construct special">{@code (?!}<i>X</i>{@code )}</td> |
377 * <tr><td style="vertical-align:top" headers="construct special">{@code (?!}<i>X</i>{@code )}</td> |
378 * <td headers="matches"><i>X</i>, via zero-width negative lookahead</td></tr> |
378 * <td headers="matches"><i>X</i>, via zero-width negative lookahead</td></tr> |
379 * <tr><td valign="top" headers="construct special">{@code (?<=}<i>X</i>{@code )}</td> |
379 * <tr><td style="vertical-align:top" headers="construct special">{@code (?<=}<i>X</i>{@code )}</td> |
380 * <td headers="matches"><i>X</i>, via zero-width positive lookbehind</td></tr> |
380 * <td headers="matches"><i>X</i>, via zero-width positive lookbehind</td></tr> |
381 * <tr><td valign="top" headers="construct special">{@code (?<!}<i>X</i>{@code )}</td> |
381 * <tr><td style="vertical-align:top" headers="construct special">{@code (?<!}<i>X</i>{@code )}</td> |
382 * <td headers="matches"><i>X</i>, via zero-width negative lookbehind</td></tr> |
382 * <td headers="matches"><i>X</i>, via zero-width negative lookbehind</td></tr> |
383 * <tr><td valign="top" headers="construct special">{@code (?>}<i>X</i>{@code )}</td> |
383 * <tr><td style="vertical-align:top" headers="construct special">{@code (?>}<i>X</i>{@code )}</td> |
384 * <td headers="matches"><i>X</i>, as an independent, non-capturing group</td></tr> |
384 * <td headers="matches"><i>X</i>, as an independent, non-capturing group</td></tr> |
385 * |
385 * |
386 * </table> |
386 * </table> |
387 * |
387 * |
388 * <hr> |
388 * <hr> |