New SupplementaryTestCases.txt
  1 // %W% %E%
  2 //
  3 // This file contains test cases with supplementary characters for regular expressions.
  4 // A test case consists of three lines:
  5 // The first line is a pattern used in the test
  6 // The second line is the input to search for the pattern in
  7 // The third line is a concatentation of the match, the number of groups,
  8 //     and the contents of the first four subexpressions.
  9 // Empty lines and lines beginning with comment slashes are ignored.
 10 
 11 // Test unsetting of backed off groups
 12 ^(\ud800\udc61)?\ud800\udc61
 13 \ud800\udc61
 14 true \ud800\udc61 1
 15 
 16 ^(\ud800\udc61\ud800)?\ud800\udc61\ud800
 17 \ud800\udc61\ud800
 18 true \ud800\udc61\ud800 1
 19 
 20 ^(\ud800\udc61\ud800\udc61(\ud800\udc62\ud800\udc62)?)+$
 21 \ud800\udc61\ud800\udc61\ud800\udc62\ud800\udc62\ud800\udc61\ud800\udc61
 22 true \ud800\udc61\ud800\udc61\ud800\udc62\ud800\udc62\ud800\udc61\ud800\udc61 2 \ud800\udc61\ud800\udc61 \ud800\udc62\ud800\udc62
 23 
 24 ^(\ud800\udc61\ud800\udc61\ud800(\ud800\udc62\ud800\udc62\ud800)?)+$
 25 \ud800\udc61\ud800\udc61\ud800\ud800\udc62\ud800\udc62\ud800\ud800\udc61\ud800\udc61\ud800
 26 true \ud800\udc61\ud800\udc61\ud800\ud800\udc62\ud800\udc62\ud800\ud800\udc61\ud800\udc61\ud800 2 \ud800\udc61\ud800\udc61\ud800 \ud800\udc62\ud800\udc62\ud800
 27 
 28 ((\ud800\udc61|\ud800\udc62)?\ud800\udc62)+
 29 \ud800\udc62
 30 true \ud800\udc62 2 \ud800\udc62
 31 
 32 ((\ud800|\ud800\udc62)?\ud800\udc62)+
 33 \ud800\udc62
 34 true \ud800\udc62 2 \ud800\udc62
 35 
 36 (\ud800\udc61\ud800\udc61\ud800\udc61)?\ud800\udc61\ud800\udc61\ud800\udc61
 37 \ud800\udc61\ud800\udc61\ud800\udc61
 38 true \ud800\udc61\ud800\udc61\ud800\udc61 1
 39 
 40 (\ud800\udc61\ud800\udc61\ud800\ud800\udc61)?\ud800\udc61\ud800\udc61\ud800\ud800\udc61
 41 \ud800\udc61\ud800\udc61\ud800\ud800\udc61
 42 true \ud800\udc61\ud800\udc61\ud800\ud800\udc61 1
 43 
 44 ^(\ud800\udc61\ud800(\ud800\udc62\ud800)?)+$
 45 \ud800\udc61\ud800\ud800\udc62\ud800\ud800\udc61\ud800
 46 true \ud800\udc61\ud800\ud800\udc62\ud800\ud800\udc61\ud800 2 \ud800\udc61\ud800 \ud800\udc62\ud800
 47 
 48 ^(\ud800\udc61(\ud800\udc62)?)+$
 49 \ud800\udc61\ud800\udc62\ud800\udc61
 50 true \ud800\udc61\ud800\udc62\ud800\udc61 2 \ud800\udc61 \ud800\udc62
 51 
 52 ^(\ud800\udc61\ud800(\ud800\udc62\ud800)?)+$
 53 \ud800\udc61\ud800\ud800\udc62\ud800\ud800\udc61\ud800
 54 true \ud800\udc61\ud800\ud800\udc62\ud800\ud800\udc61\ud800 2 \ud800\udc61\ud800 \ud800\udc62\ud800
 55 
 56 ^(\ud800\udc61(\ud800\udc62(\ud800\udc63)?)?)?\ud800\udc61\ud800\udc62\ud800\udc63
 57 \ud800\udc61\ud800\udc62\ud800\udc63
 58 true \ud800\udc61\ud800\udc62\ud800\udc63 3
 59 
 60 ^(\ud800\udc61\ud800(\ud800\udc62(\ud800\udc63)?)?)?\ud800\udc61\ud800\ud800\udc62\ud800\udc63
 61 \ud800\udc61\ud800\ud800\udc62\ud800\udc63
 62 true \ud800\udc61\ud800\ud800\udc62\ud800\udc63 3
 63 
 64 ^(\ud800\udc61(\ud800\udc02(\ud800\udc63))).*
 65 \ud800\udc61\ud800\udc02\ud800\udc63
 66 true \ud800\udc61\ud800\udc02\ud800\udc63 3 \ud800\udc61\ud800\udc02\ud800\udc63 \ud800\udc02\ud800\udc63 \ud800\udc63
 67 
 68 ^(\ud800\udc61(\ud800(\ud800\udc63))).*
 69 \ud800\udc61\ud800\ud800\udc63
 70 true \ud800\udc61\ud800\ud800\udc63 3 \ud800\udc61\ud800\ud800\udc63 \ud800\ud800\udc63 \ud800\udc63
 71 
 72 // Patterns including no surrogates
 73 (.)([^a])xyz
 74 \ud801\ud800\udc00xyz
 75 true \ud801\ud800\udc00xyz 2 \ud801 \ud800\udc00
 76 
 77 [^a-z]..
 78 \ud801\ud800\udc00xyz
 79 true \ud801\ud800\udc00x 0
 80 
 81 .$
 82 \ud801\ud800\udc00
 83 true \ud800\udc00 0
 84 
 85 .$
 86 \ud801\udc01\ud800\udc00
 87 true \ud800\udc00 0
 88 
 89 .$
 90 \ud801\udc01\ud800\udc00\udcff
 91 true \udcff 0
 92 
 93 [^x-\uffff][^y-\uffff]
 94 \ud800\udc00pqr
 95 true \ud800\udc00p 0
 96 
 97 [^x-\uffff]+
 98 \ud800\udc00pqrx
 99 true \ud800\udc00pqr 0
100 
101 /// The following test cases fail due to use of Start rather than
102 /// StartS. Disabled for now.
103 ///[a-\uffff]
104 ///\ud800\udc00x
105 ///true x 0
106 ///
107 ///[a-\uffff]
108 ///\ud800\udc00
109 ///false 0
110 
111 // use of x modifier
112 \ud800\udc61bc(?x)bl\ud800\udc61h
113 \ud800\udc61bcbl\ud800\udc61h
114 true \ud800\udc61bcbl\ud800\udc61h 0
115 
116 \ud800\udc61bc(?x)  bl\ud800\udc61h
117 \ud800\udc61bcbl\ud800\udc61h
118 true \ud800\udc61bcbl\ud800\udc61h 0
119 
120 \ud800\udc61bc(?x)  bl\ud800\udc61h  blech
121 \ud800\udc61bcbl\ud800\udc61hblech
122 true \ud800\udc61bcbl\ud800\udc61hblech 0
123 
124 \ud800\udc61bc(?x)  bl\ud800\udc61h # ignore comment
125 \ud800\udc61bcbl\ud800\udc61h
126 true \ud800\udc61bcbl\ud800\udc61h 0
127 
128 // Simple alternation
129 \ud800\udc61|\ud800\udc62
130 \ud800\udc61
131 true \ud800\udc61 0
132 
133 \ud800\udc61|\ud800\udc62|\ud800
134 \ud800\udc61
135 true \ud800\udc61 0
136 
137 \ud800\udc61|\ud800
138 \ud800\udc62
139 false 0
140 
141 \ud800\udc62|\ud800
142 \ud800
143 true \ud800 0
144 
145 \ud800\udc61|\ud802\udc02
146 z
147 false 0
148 
149 \ud800\udc61|\ud802\udc02
150 \ud802\udc02
151 true \ud802\udc02 0
152 
153 \ud800\udc61|\ud802\udc02|\ud803\udc03\ud804\udc04
154 \ud803\udc03\ud804\udc04
155 true \ud803\udc03\ud804\udc04 0
156 
157 \ud800\udc61|\ud800\udc61d
158 \ud800\udc61d
159 true \ud800\udc61 0
160 
161 z(\ud800\udc61|\ud800\udc61c)\ud802\udc02
162 z\ud800\udc61c\ud802\udc02
163 true z\ud800\udc61c\ud802\udc02 1 \ud800\udc61c
164 
165 z(\ud800\udc61|\ud800\udc61c|\udc61c)\ud802\udc02
166 z\udc61c\ud802\udc02
167 true z\udc61c\ud802\udc02 1 \udc61c
168 
169 // Simple codepoint class
170 [\ud800\udc61\ud802\udc02c]+
171 \ud800\udc61\ud802\udc02\ud800\udc61\ud802\udc02\ud800\udc61\ud802\udc02
172 true \ud800\udc61\ud802\udc02\ud800\udc61\ud802\udc02\ud800\udc61\ud802\udc02 0
173 
174 [\ud800\udc61\ud802\udc02c]+
175 \ud800\udc61\ud802\udc02\ud800\udc61\ud802\udc02\ud800\udc61\ud802\udc02
176 true \ud800\udc61\ud802\udc02\ud800\udc61\ud802\udc02\ud800\udc61\ud802\udc02 0
177 
178 [\ud800\udc61\ud802\udc02c\ud800]+
179 \ud800\udc61\ud802\udc02\ud800\ud800\udc61\ud802\udc02\ud800\udc61\ud802\udc02
180 true \ud800\udc61\ud802\udc02\ud800\ud800\udc61\ud802\udc02\ud800\udc61\ud802\udc02 0
181 
182 [\ud800\udc61bc]+
183 d\ud800\udc62fg
184 false 0
185 
186 [\ud800\udc61bc]+[\ud804\udc04ef]+[\ud807\udc07hi]+
187 zzz\ud800\udc61\ud800\udc61\ud804\udc04\ud804\udc04\ud807\udc07\ud807\udc07zzz
188 true \ud800\udc61\ud800\udc61\ud804\udc04\ud804\udc04\ud807\udc07\ud807\udc07 0
189 
190 // Range codepoint class
191 [\ud801\udc01-\ud807\udc07]+
192 \ud8ff\udcff\ud8ff\udcff\ud8ff\udcff\ud807\udc07\ud807\udc07\ud807\udc07
193 true \ud807\udc07\ud807\udc07\ud807\udc07 0
194 
195 [\ud801\udc01-\ud807\udc07]+
196 mmm
197 false 0
198 
199 [\ud800\udc61-]+
200 z\ud800\udc61-9z
201 true \ud800\udc61- 0
202 
203 // Negated char class
204 [^\ud800\udc61\ud802\udc02c]+
205 \ud800\udc61\ud802\udc02\ud800\udc61\ud802\udc02\ud800\udc61\ud802\udc02
206 false 0
207 
208 [^\ud800\udc61\ud802\udc02\ud803\udc03]+
209 \ud800\udc61\ud800\udc61\ud800\udc61\ud802\udc02\ud802\udc02\ud802\udc02\ud803\udc03\ud803\udc03\ud803\udc03\ud804\udc04efg
210 true \ud804\udc04efg 0
211 
212 [^\ud800\udc61\ud802\udc02\ud803\udc03\ud800]+
213 \ud800\udc61\ud800\udc61\ud800\udc61\ud802\udc02\ud802\udc02\ud802\udc02\ud803\udc03\ud803\udc03\ud803\udc03\ud804\udc04efg
214 true \ud804\udc04efg 0
215 
216 // Making sure a ^ not in first position matches literal ^
217 [\ud801\udc01\ud802\udc02\ud803\udc03^\ud802\udc02]
218 \ud802\udc02
219 true \ud802\udc02 0
220 
221 [\ud801\udc01\ud802\udc02\ud803\udc03^\ud802\udc02]
222 ^
223 true ^ 0
224 
225 // Class union and intersection
226 [\ud801\udc01\ud802\udc02\ud803\udc03[\ud804\udc04\ud805\udc05\ud806\udc06]]
227 \ud802\udc02
228 true \ud802\udc02 0
229 
230 [\ud800\udc61\ud802\udc02\ud803\udc03[\ud804\udc04\ud805\udc05\ud806\udc06]]
231 \ud805\udc05
232 true \ud805\udc05 0
233 
234 [\ud801\udc01-\ud804\udc04[0-9][\ud80b\udc0b-\ud80d\udc0d]]
235 \ud801\udc01
236 true \ud801\udc01 0
237 
238 [\ud801\udc01-\ud804\udc04[0-9][\ud80b\udc0b-\ud80d\udc0d]]
239 \ud80c\udc0c
240 true \ud80c\udc0c 0
241 
242 [\ud801\udc01-\ud804\udc04[0-9][\ud80b\udc0b-\ud80d\udc0d]]
243 4
244 true 4 0
245 
246 [\ud801\udc01-\ud804\udc04[0-9][\ud80b\udc0b-\ud80d\udc0d]]
247 \ud805\udc05
248 false 0
249 
250 [\ud801\udc01-\ud804\udc04[0-9][\ud80b\udc0b-\ud80d\udc0d]]
251 \ud816\udc16
252 false 0
253 
254 [[\ud801\udc01-\ud804\udc04][0-9][\ud80b\udc0b-\ud80d\udc0d]]
255 \ud802\udc02
256 true \ud802\udc02 0
257 
258 [[\ud801\udc01-\ud804\udc04][0-9][\ud80b\udc0b-\ud80d\udc0d]]
259 \ud81a\udc1a
260 false 0
261 
262 [\ud801\udc01-\ud803\udc03[\ud804\udc04-\ud806\udc06[\ud807\udc07-\ud809\udc09]]]
263 \ud801\udc01
264 true \ud801\udc01 0
265 
266 [\ud801\udc01-\ud803\udc03[\ud804\udc04-\ud806\udc06[\ud807\udc07-\ud809\udc09]]]
267 \ud805\udc05
268 true \ud805\udc05 0
269 
270 [\ud801\udc01-\ud803\udc03[\ud804\udc04-\ud806\udc06[\ud807\udc07-\ud809\udc09]]]
271 \ud808\udc08
272 true \ud808\udc08 0
273 
274 [\ud801\udc01-\ud803\udc03[\ud804\udc04-\ud806\udc06[\ud807\udc07-\ud809\udc09]]]
275 \ud80d\udc0d
276 false 0
277 
278 [\ud801\udc01-\ud803\udc03[\ud804\udc04-\ud806\udc06[\ud807\udc07-\ud809\udc09]]\ud80d\udc0d]
279 \ud80d\udc0d
280 true \ud80d\udc0d 0
281 
282 [\ud801\udc01\ud802\udc02\ud803\udc03[\ud804\udc04\ud805\udc05\ud806\udc06]\ud807\udc07\ud808\udc08\ud809\udc09]
283 \ud801\udc01
284 true \ud801\udc01 0
285 
286 [\ud800\udc61\ud802\udc02\ud803\udc03[\ud804\udc04\ud805\udc05\ud806\udc06]\ud807\udc07\ud808\udc08\ud809\udc09]
287 \ud804\udc04
288 true \ud804\udc04 0
289 
290 [\ud800\udc61\ud802\udc02\ud803\udc03[\ud804\udc04\ud805\udc05\ud806\udc06]\ud807\udc07\ud808\udc08\ud809\udc09]
291 \ud808\udc08
292 true \ud808\udc08 0
293 
294 [\ud800\udc61\ud802\udc02\ud803\udc03[\ud804\udc04\ud805\udc05\ud806\udc06]\ud807\udc07\ud808\udc08\ud809\udc09]
295 \ud816\udc16
296 false 0
297 
298 [\ud801\udc01-\ud803\udc03&&[\ud804\udc04-\ud806\udc06]]
299 \ud801\udc01
300 false 0
301 
302 [\ud801\udc01-\ud803\udc03&&[\ud804\udc04-\ud806\udc06]]
303 \ud805\udc05
304 false 0
305 
306 [\ud801\udc01-\ud803\udc03&&[\ud804\udc04-\ud806\udc06]]
307 \ud81a\udc1a
308 false 0
309 
310 [[\ud801\udc01-\ud803\udc03]&&[\ud804\udc04-\ud806\udc06]]
311 \ud801\udc01
312 false 0
313 
314 [[\ud801\udc01-\ud803\udc03]&&[\ud804\udc04-\ud806\udc06]]
315 \ud805\udc05
316 false 0
317 
318 [[\ud801\udc01-\ud803\udc03]&&[\ud804\udc04-\ud806\udc06]]
319 \ud81a\udc1a
320 false 0
321 
322 [\ud801\udc01-\ud803\udc03&&\ud804\udc04-\ud806\udc06]
323 \ud801\udc01
324 false 0
325 
326 [\ud801\udc01-\ud80d\udc0d&&\ud80d\udc0d-\ud81a\udc1a]
327 \ud80d\udc0d
328 true \ud80d\udc0d 0
329 
330 [\ud801\udc01-\ud80d\udc0d&&\ud80d\udc0d-\ud81a\udc1a&&\ud801\udc01-\ud803\udc03]
331 \ud80d\udc0d
332 false 0
333 
334 [\ud801\udc01-\ud80d\udc0d&&\ud80d\udc0d-\ud81a\udc1a&&\ud801\udc01-\ud81a\udc1a]
335 \ud80d\udc0d
336 true \ud80d\udc0d 0
337 
338 [[\ud801\udc01-\ud80d\udc0d]&&[\ud80d\udc0d-\ud81a\udc1a]]
339 \ud801\udc01
340 false 0
341 
342 [[\ud801\udc01-\ud80d\udc0d]&&[\ud80d\udc0d-\ud81a\udc1a]]
343 \ud80d\udc0d
344 true \ud80d\udc0d 0
345 
346 [[\ud801\udc01-\ud80d\udc0d]&&[\ud80d\udc0d-\ud81a\udc1a]]
347 \ud81a\udc1a
348 false 0
349 
350 [[\ud801\udc01-\ud80d\udc0d]&&[^\ud801\udc01-\ud803\udc03]]
351 \ud801\udc01
352 false 0
353 
354 [[\ud801\udc01-\ud80d\udc0d]&&[^\ud801\udc01-\ud803\udc03]]
355 \ud804\udc04
356 true \ud804\udc04 0
357 
358 [\ud801\udc01-\ud80d\udc0d&&[^\ud801\udc01-\ud803\udc03]]
359 \ud801\udc01
360 false 0
361 
362 [\ud801\udc01-\ud80d\udc0d&&[^\ud801\udc01-\ud803\udc03]]
363 \ud804\udc04
364 true \ud804\udc04 0
365 
366 [\ud801\udc01-\ud803\udc03\ud804\udc04-\ud806\udc06&&[\ud804\udc04-\ud806\udc06]]
367 \ud801\udc01
368 false 0
369 
370 [\ud801\udc01-\ud803\udc03\ud804\udc04-\ud806\udc06&&[\ud804\udc04-\ud806\udc06]]
371 \ud805\udc05
372 true \ud805\udc05 0
373 
374 [[\ud801\udc01-\ud803\udc03]&&\ud804\udc04-\ud806\udc06\ud801\udc01-\ud803\udc03]
375 \ud801\udc01
376 true \ud801\udc01 0
377 
378 [[\ud801\udc01-\ud803\udc03]&&[\ud804\udc04-\ud806\udc06][\ud801\udc01-\ud803\udc03]]
379 \ud801\udc01
380 true \ud801\udc01 0
381 
382 [[\ud801\udc01-\ud803\udc03][\ud804\udc04-\ud806\udc06]&&\ud801\udc01\ud802\udc02\ud803\udc03]
383 \ud801\udc01
384 true \ud801\udc01 0
385 
386 [[\ud801\udc01-\ud803\udc03][\ud804\udc04-\ud806\udc06]&&\ud801\udc01\ud802\udc02\ud803\udc03[\ud804\udc04\ud805\udc05\ud806\udc06]]
387 \ud805\udc05
388 true \ud805\udc05 0
389 
390 [[\ud801\udc01-\ud803\udc03]&&[\ud802\udc02-\ud804\udc04]&&[\ud803\udc03-\ud805\udc05]]
391 \ud801\udc01
392 false 0
393 
394 [[\ud801\udc01-\ud803\udc03]&&[\ud802\udc02-\ud804\udc04]&&[\ud803\udc03-\ud805\udc05]]
395 \ud803\udc03
396 true \ud803\udc03 0
397 
398 [[\ud801\udc01-\ud803\udc03]&&[\ud802\udc02-\ud804\udc04][\ud803\udc03-\ud805\udc05]&&[\ud815\udc15-\ud81a\udc1a]]
399 \ud803\udc03
400 false 0
401 
402 [\ud801\udc01\ud802\udc02\ud803\udc03[^\ud802\udc02\ud803\udc03\ud804\udc04]]
403 \ud801\udc01
404 true \ud801\udc01 0
405 
406 [\ud800\udc61\ud802\udc02\ud803\udc03[^\ud802\udc02\ud803\udc03\ud804\udc04]]
407 \ud804\udc04
408 false 0
409 
410 [\ud801\udc01-\ud803\udc03&&\ud801\udc01-\ud804\udc04&&\ud801\udc01-\ud805\udc05\ud807\udc07\ud808\udc08\ud809\udc09]
411 \ud802\udc02
412 true \ud802\udc02 0
413 
414 [\ud801\udc01-\ud803\udc03&&\ud801\udc01-\ud804\udc04&&\ud801\udc01-\ud805\udc05\ud807\udc07\ud808\udc08\ud809\udc09]
415 \ud807\udc07
416 false 0
417 
418 [[\ud801\udc01[\ud802\udc02]]&&[\ud802\udc02[\ud801\udc01]]]
419 \ud801\udc01
420 true \ud801\udc01 0
421 
422 // Unicode isn't supported in clazz()
423 [[\ud800\udc61]&&[b][c][\ud800\udc61]&&[^d]]
424 \ud800\udc61
425 true \ud800\udc61 0
426 
427 [[\ud800\udc61]&&[\ud802\udc02][\ud800][\ud800\udc61]&&[^\ud804\udc04]]
428 \ud800\udc61
429 true \ud800\udc61 0
430 
431 [[\ud800\udc61]&&[b][\ud800][\ud800\udc61]&&[^\ud804\udc04]]
432 \ud804\udc04
433 false 0
434 
435 [[\ud800\udc61]&&[b][c][\ud800\udc61]&&[^d]]
436 d
437 false 0
438 
439 [[[\ud800\udc01-\ud800\udc04]&&[\ud800\udc03-\ud800\udc06]]]
440 \ud800\udc01
441 false 0
442 
443 [[[\ud800\udc01-\ud800\udc04]&&[\ud800\udc03-\ud800\udc06]]]
444 \ud800\udc03
445 true \ud800\udc03 0
446 
447 [[[\ud800\udc01-\ud800\udc04]&&[\ud800\udc03-\ud800\udc06]]&&[\ud800\udc03]]
448 \ud800\udc03
449 true \ud800\udc03 0
450 
451 [[[\ud800\udc01-\ud800\udc04]&&[\ud800\udc03-\ud800\udc06]]&&[\ud800\udc03]&&\ud800\udc03]
452 \ud800\udc03
453 true \ud800\udc03 0
454 
455 [[[\ud800\udc01-\ud800\udc04]&&[\ud800\udc03-\ud800\udc06]]&&[\ud800\udc03]&&\ud800\udc03&&\ud800\udc03]
456 \ud800\udc03
457 true \ud800\udc03 0
458 
459 [[[\ud800\udc01-\ud800\udc04]&&[\ud800\udc03-\ud800\udc06]]&&[\ud800\udc03]&&\ud800\udc03&&[\ud800\udc03\ud800\udc04\ud800\udc05]]
460 \ud800\udc03
461 true \ud800\udc03 0
462 
463 [z[\ud800\udc61b\ud800\udc03&&b\ud800\udc03\ud800\udc04]]
464 \ud800\udc03
465 true \ud800\udc03 0
466 
467 [z[\ud800\udc61b\ud800\udc03&&b\ud800\udc03\ud800\udc04]&&[u-z]]
468 z
469 true z 0
470 
471 [x[\ud800\udc61b\ud800\udc03&&b\ud800\udc03\ud800\udc04[z]]&&[u-z]]
472 z
473 false 0
474 
475 [x[[wz]\ud800\udc61b\ud800\udc03&&b\ud800\udc03\ud800\udc04[z]]&&[u-z]]
476 z
477 true z 0
478 
479 [[\ud800\udc61b\ud800\udc03]&&[\ud800\udc04\ud800\udc05f]\ud800\udc61b\ud800\udc03]
480 \ud800\udc61
481 true \ud800\udc61 0
482 
483 [[\ud800\udc61b\ud800\udc03]&&[\ud800\udc04\ud800\udc05f]xyz[\ud800\udc61b\ud800\udc03]]
484 \ud800\udc61
485 true \ud800\udc61 0
486 
487 \pL
488 \ud800\udc00
489 true \ud800\udc00 0
490 
491 \p{IsASCII}
492 \ud800\udc00
493 false 0
494 
495 \pLbc
496 \ud800\udc00bc
497 true \ud800\udc00bc 0
498 
499 \ud800\udc61[r\p{InGreek}]c
500 \ud800\udc61\u0370c
501 true \ud800\udc61\u0370c 0
502 
503 \ud800\udc61\p{InGreek}
504 \ud800\udc61\u0370
505 true \ud800\udc61\u0370 0
506 
507 \ud800\udc61\P{InGreek}
508 \ud800\udc61\u0370
509 false 0
510 
511 \ud800\udc61\P{InGreek}
512 \ud800\udc61b
513 true \ud800\udc61b 0
514 
515 \ud800\udc61{^InGreek}
516 -
517 error
518 
519 \ud800\udc61\p{^InGreek}
520 -
521 error
522 
523 \ud800\udc61\P{^InGreek}
524 -
525 error
526 
527 \ud800\udc61\p{InGreek}
528 \ud800\udc61\u0370
529 true \ud800\udc61\u0370 0
530 
531 \ud800\udc61[\p{InGreek}]c
532 \ud800\udc61\u0370c
533 true \ud800\udc61\u0370c 0
534 
535 \ud800\udc61[\P{InGreek}]c
536 \ud800\udc61\u0370c
537 false 0
538 
539 \ud800\udc61[\P{InGreek}]c
540 \ud800\udc61bc
541 true \ud800\udc61bc 0
542 
543 \ud800\udc61[{^InGreek}]c
544 \ud800\udc61nc
545 true \ud800\udc61nc 0
546 
547 \ud800\udc61[{^InGreek}]c
548 \ud800\udc61zc
549 false 0
550 
551 \ud800\udc61[\p{^InGreek}]c
552 -
553 error
554 
555 \ud800\udc61[\P{^InGreek}]c
556 -
557 error
558 
559 \ud800\udc61[\p{InGreek}]
560 \ud800\udc61\u0370
561 true \ud800\udc61\u0370 0
562 
563 \ud800\udc61[r\p{InGreek}]c
564 \ud800\udc61rc
565 true \ud800\udc61rc 0
566 
567 \ud800\udc61[\p{InGreek}r]c
568 \ud800\udc61rc
569 true \ud800\udc61rc 0
570 
571 \ud800\udc61[r\p{InGreek}]c
572 \ud800\udc61rc
573 true \ud800\udc61rc 0
574 
575 \ud800\udc61[^\p{InGreek}]c
576 \ud800\udc61\u0370c
577 false 0
578 
579 \ud800\udc61[^\P{InGreek}]c
580 \ud800\udc61\u0370c
581 true \ud800\udc61\u0370c 0
582 
583 \ud800\udc61[\p{InGreek}&&[^\u0370]]c
584 \ud800\udc61\u0370c
585 false 0
586 
587 // Test the dot metacharacter
588 \ud800\udc61.c.+
589 \ud800\udc61#c%&
590 true \ud800\udc61#c%& 0
591 
592 \ud800\udc61b.
593 \ud800\udc61b\n
594 false 0
595 
596 (?s)\ud800\udc61b.
597 \ud800\udc61b\n
598 true \ud800\udc61b\n 0
599 
600 \ud800\udc61[\p{L}&&[\P{InGreek}]]c
601 \ud800\udc61\u6000c
602 true \ud800\udc61\u6000c 0
603 
604 \ud800\udc61[\p{L}&&[\P{InGreek}]]c
605 \ud800\udc61rc
606 true \ud800\udc61rc 0
607 
608 \ud800\udc61[\p{L}&&[\P{InGreek}]]c
609 \ud800\udc61\u0370c
610 false 0
611 
612 \ud800\udc61\p{InGreek}c
613 \ud800\udc61\u0370c
614 true \ud800\udc61\u0370c 0
615 
616 \ud800\udc61\p{Sc}
617 \ud800\udc61$
618 true \ud800\udc61$ 0
619 
620 // Test \p{L}
621 \p{L}
622 \ud800\udf1e
623 true \ud800\udf1e 0
624 
625 ^a\p{L}z$
626 a\ud800\udf1ez
627 true a\ud800\udf1ez 0
628 
629 // Test \P{InDeseret}
630 
631 \ud800\udf00\p{L}{2,3}\P{L}*supp->\ud900\udc00<-\P{InDeseret}
632 \ud800\udf00\ud800\udf1e\ud800\udf1esupp->\ud900\udc00<-\ud901\udf00
633 true \ud800\udf00\ud800\udf1e\ud800\udf1esupp->\ud900\udc00<-\ud901\udf00 0
634 
635 \ud800\udf00\p{L}{2,3}\P{L}*supp->\ud900\udc00<-\P{InDeseret}
636 \ud800\udf00\ud800\udf1e\ud800\udf1e\ud901\udf00supp->\ud900\udc00<-\ud901\udf00
637 true \ud800\udf00\ud800\udf1e\ud800\udf1e\ud901\udf00supp->\ud900\udc00<-\ud901\udf00 0
638 
639 // Test \p{InDeseret}
640 \ud800\udf00\p{L}{2,3}\P{L}*supp->\ud900\udc00<-\p{InDeseret}
641 \ud800\udf00\ud800\udf1e\ud800\udf1e\ud901\udf00supp->\ud900\udc00<-\ud801\udc00
642 true \ud800\udf00\ud800\udf1e\ud800\udf1e\ud901\udf00supp->\ud900\udc00<-\ud801\udc00 0
643 
644 // Test the word char escape sequence
645 \ud800\udc61b\wc
646 \ud800\udc61bcc
647 true \ud800\udc61bcc 0
648 
649 \ud800\udc61bc[\w]
650 \ud800\udc61bcd
651 true \ud800\udc61bcd 0
652 
653 \ud800\udc61bc[\sdef]*
654 \ud800\udc61bc  def
655 true \ud800\udc61bc  def 0
656 
657 \ud800\udc61bc[\sy-z]*
658 \ud800\udc61bc y z
659 true \ud800\udc61bc y z 0
660 
661 \ud800\udc01bc[\ud800\udc01-\ud800\udc04\sm-p]*
662 \ud800\udc01bc\ud800\udc01\ud800\udc01 mn  p
663 true \ud800\udc01bc\ud800\udc01\ud800\udc01 mn  p 0
664 
665 // Test the whitespace escape sequence
666 \ud800\udc61b\s\ud800\udc03
667 \ud800\udc61b \ud800\udc03
668 true \ud800\udc61b \ud800\udc03 0
669 
670 \s\s\s
671 bl\ud800\udc61h  err
672 false 0
673 
674 \S\S\s
675 bl\ud800\udc61h  err
676 true \ud800\udc61h  0
677 
678 // Test the digit escape sequence
679 \ud800\udc61b\d\ud800\udc03
680 \ud800\udc61b9\ud800\udc03
681 true \ud800\udc61b9\ud800\udc03 0
682 
683 \d\d\d
684 bl\ud800\udc61h45
685 false 0
686 
687 // Test the caret metacharacter
688 ^\ud800\udc61bc
689 \ud800\udc61bcdef
690 true \ud800\udc61bc 0
691 
692 ^\ud800\udc61bc
693 bcd\ud800\udc61bc
694 false 0
695 
696 // Greedy ? metacharacter
697 \ud800\udc61?\ud800\udc02
698 \ud800\udc61\ud800\udc61\ud800\udc61\ud800\udc61\ud800\udc02
699 true \ud800\udc61\ud800\udc02 0
700 
701 \udc61?\ud800\udc02
702 \ud800\udc61\udc61\udc61\ud800\udc02
703 true \udc61\ud800\udc02 0
704 
705 \ud800\udc61?\ud800\udc02
706 \ud800\udc02
707 true \ud800\udc02 0
708 
709 \ud800?\ud800\udc02
710 \ud800\udc02
711 true \ud800\udc02 0
712 
713 \ud800\udc61?\ud800\udc02
714 \ud800\udc61\ud800\udc61\ud800\udc61\ud800\udc03\ud800\udc03\ud800\udc03
715 false 0
716 
717 .?\ud800\udc02
718 \ud800\udc61\ud800\udc61\ud800\udc61\ud800\udc61\ud800\udc02
719 true \ud800\udc61\ud800\udc02 0
720 
721 // Reluctant ? metacharacter
722 \ud800\udc61??\ud800\udc02
723 \ud800\udc61\ud800\udc61\ud800\udc61\ud800\udc61\ud800\udc02
724 true \ud800\udc61\ud800\udc02 0
725 
726 \ud800??\ud800\udc02
727 \ud800\ud800\ud8001\ud800\ud800\udc02
728 true \ud800\ud800\udc02 0
729 
730 \ud800\udc61??\ud800\udc02
731 \ud800\udc02
732 true \ud800\udc02 0
733 
734 \ud800??\ud800\udc02
735 \ud800\udc02
736 true \ud800\udc02 0
737 
738 \ud800\udc61??\ud800\udc02
739 \ud800\udc61\ud800\udc61\ud800\udc61ccc
740 false 0
741 
742 .??\ud800\udc02
743 \ud800\udc61\ud800\udc61\ud800\udc61\ud800\udc61\ud800\udc02
744 true \ud800\udc61\ud800\udc02 0
745 
746 // Possessive ? metacharacter
747 \ud800\udc61?+\ud800\udc02
748 \ud800\udc61\ud800\udc61\ud800\udc61\ud800\udc61\ud800\udc02
749 true \ud800\udc61\ud800\udc02 0
750 
751 \ud800\udc61?+\ud800\udc02
752 \ud800\udc02
753 true \ud800\udc02 0
754 
755 \ud800\udc61?+\ud800\udc02
756 \ud800\udc61\ud800\udc61\ud800\udc61ccc
757 false 0
758 
759 .?+\ud800\udc02
760 \ud800\udc61\ud800\udc61\ud800\udc61\ud800\udc61\ud800\udc02
761 true \ud800\udc61\ud800\udc02 0
762 
763 // Greedy + metacharacter
764 \ud800\udc61+\ud800\udc02
765 \ud800\udc61\ud800\udc61\ud800\udc61\ud800\udc61\ud800\udc02
766 true \ud800\udc61\ud800\udc61\ud800\udc61\ud800\udc61\ud800\udc02 0
767 
768 \udc61+\ud800\udc02
769 \ud800\udc61\udc61\udc61\udc61\ud800\udc02
770 true \udc61\udc61\udc61\ud800\udc02 0
771 
772 \ud800\udc61+\ud800\udc02
773 \ud800\udc02
774 false 0
775 
776 \ud800+\ud800\udc02
777 \ud800\udc02
778 false 0
779 
780 \ud800\udc61+\ud800\udc02
781 \ud800\udc61\ud800\udc61\ud800\udc61ccc
782 false 0
783 
784 .+\ud800\udc02
785 \ud800\udc61\ud800\udc61\ud800\udc61\ud800\udc61\ud800\udc02
786 true \ud800\udc61\ud800\udc61\ud800\udc61\ud800\udc61\ud800\udc02 0
787 
788 .+\ud800\udc02
789 \ud800\udc61\udc61\udc61\udc61\ud800\udc02
790 true \ud800\udc61\udc61\udc61\udc61\ud800\udc02 0
791 
792 // Reluctant + metacharacter
793 \ud800\udc61+?\ud800\udc02
794 \ud800\udc61\ud800\udc61\ud800\udc61\ud800\udc61\ud800\udc02
795 true \ud800\udc61\ud800\udc61\ud800\udc61\ud800\udc61\ud800\udc02 0
796 
797 \udc61+?\ud800\udc02
798 \udc61\udc61\udc61\udc61\ud800\udc02
799 true \udc61\udc61\udc61\udc61\ud800\udc02 0
800 
801 \ud800\udc61+?\ud800\udc02
802 \ud800\udc02
803 false 0
804 
805 \ud800+?\ud800\udc02
806 \ud800\udc02
807 false 0
808 
809 \ud800\udc61+?\ud800\udc02
810 \ud800\udc61\ud800\udc61\ud800\udc61ccc
811 false 0
812 
813 .+?\ud800\udc02
814 \ud800\udc61\ud800\udc61\ud800\udc61\ud800\udc61\ud800\udc02
815 true \ud800\udc61\ud800\udc61\ud800\udc61\ud800\udc61\ud800\udc02 0
816 
817 // Possessive + metacharacter
818 \ud800\udc61++\ud800\udc02
819 \ud800\udc61\ud800\udc61\ud800\udc61\ud800\udc61\ud800\udc02
820 true \ud800\udc61\ud800\udc61\ud800\udc61\ud800\udc61\ud800\udc02 0
821 
822 \ud800\udc61++\ud800\udc02
823 \ud800\udc02
824 false 0
825 
826 \ud800\udc61++\ud800\udc02
827 \ud800\udc61\ud800\udc61\ud800\udc61ccc
828 false 0
829 
830 .++\ud800\udc02
831 \ud800\udc61\ud800\udc61\ud800\udc61\ud800\udc61\ud800\udc02
832 false 0
833 
834 // Greedy Repetition
835 \ud800\udc61{2,3}
836 \ud800\udc61
837 false 0
838 
839 \ud800\udc61{2,3}
840 \ud800\udc61\ud800\udc61
841 true \ud800\udc61\ud800\udc61 0
842 
843 \ud800\udc61{2,3}
844 \ud800\udc61\ud800\udc61\ud800\udc61
845 true \ud800\udc61\ud800\udc61\ud800\udc61 0
846 
847 \ud800\udc61{2,3}
848 \ud800\udc61\ud800\udc61\ud800\udc61\ud800\udc61
849 true \ud800\udc61\ud800\udc61\ud800\udc61 0
850 
851 \ud800\udc61{3,}
852 zzz\ud800\udc61\ud800\udc61\ud800\udc61\ud800\udc61zzz
853 true \ud800\udc61\ud800\udc61\ud800\udc61\ud800\udc61 0
854 
855 \ud800\udc61{3,}
856 zzz\ud800\udc61\ud800\udc61zzz
857 false 0
858 
859 // Reluctant Repetition
860 \ud800\udc61{2,3}?
861 \ud800\udc61
862 false 0
863 
864 \ud800\udc61{2,3}?
865 \ud800\udc61\ud800\udc61
866 true \ud800\udc61\ud800\udc61 0
867 
868 \ud800\udc61{2,3}?
869 \ud800\udc61\ud800\udc61\ud800\udc61
870 true \ud800\udc61\ud800\udc61 0
871 
872 \ud800\udc61{2,3}?
873 \ud800\udc61\ud800\udc61\ud800\udc61\ud800\udc61
874 true \ud800\udc61\ud800\udc61 0
875 
876 // Zero width Positive lookahead
877 \ud800\udc61\ud802\udc02\ud803\udc03(?=\ud804\udc04)
878 zzz\ud800\udc61\ud802\udc02\ud803\udc03\ud804\udc04
879 true \ud800\udc61\ud802\udc02\ud803\udc03 0
880 
881 \ud800\udc61\ud802\udc02\ud803\udc03(?=\ud804\udc04)
882 zzz\ud800\udc61\ud802\udc02\ud803\udc03e\ud804\udc04
883 false 0
884 
885 \ud800\udc61\ud802\udc02\ud803\udc03(?=\udcff\ud804\udc04)
886 zzz\ud800\udc61\ud802\udc02\ud803\udc03\udcff\ud804\udc04
887 true \ud800\udc61\ud802\udc02\ud803\udc03 0
888 
889 \ud800\udc61\ud802\udc02\ud803\udc03(?=\udcff\ud804\udc04)
890 zzz\ud800\udc61\ud802\udc02\ud803\udc03\ud8ff\udcff\ud804\udc04
891 false 0
892 
893 // Zero width Negative lookahead
894 \ud800\udc61\ud802\udc02\ud803\udc03(?!\ud804\udc04)
895 zz\ud800\udc61\ud802\udc02\ud803\udc03\ud804\udc04
896 false 0
897 
898 a\ud802\udc02\ud803\udc03(?!\ud804\udc04)
899 zza\ud802\udc02\ud803\udc03\udc04\ud804\udc04
900 true a\ud802\udc02\ud803\udc03 0
901 
902 \ud800\udc61\ud802\udc02\ud803\udc03(?!\ud804\udc04\ud8ff)
903 zz\ud800\udc61\ud802\udc02\ud803\udc03\ud804\udc04\ud8ffX
904 false 0
905 
906 a\ud802\udc02\ud803\udc03(?!\ud804\udc04\ud8ff)
907 zza\ud802\udc02\ud803\udc03e\ud804\udc04\ud8ff\udcff
908 true a\ud802\udc02\ud803\udc03 0
909 
910 // Zero width Positive lookbehind
911 (?<=\ud801\udc01\ud802\udc02)\ud803\udc03
912 \ud801\udc01\ud802\udc02\ud803\udc03
913 true \ud803\udc03 0
914 
915 // Zero width Negative lookbehind
916 (?<!\ud801\udc01)\ud802\udc02\ud803\udc03
917 ###\ud800\udc00\ud802\udc02\ud803\udc03
918 true \ud802\udc02\ud803\udc03 0
919 
920 (?<![\ud801\udc01\ud802\udc02])\ud803\udc03.
921 \ud801\udc01\ud803\udc03x\ud800\udc00\ud803\udc03y
922 true \ud803\udc03y 0
923 
924 (?<!\ud801\udc01)\ud803\udc03
925 \ud801\udc01\ud803\udc03
926 false 0
927 
928 // Nondeterministic group
929 (\ud800\udc61+\ud802)+
930 \ud800\udc61\ud802\ud800\udc61\ud802\ud800\udc61\ud802
931 true \ud800\udc61\ud802\ud800\udc61\ud802\ud800\udc61\ud802 1 \ud800\udc61\ud802
932 
933 (\ud800\udc61|\ud802)+
934 \ud800\ud802\udc61\ud803\ud802\udc61
935 false 1
936 
937 // Deterministic group
938 (\ud800\udc61\ud802)+
939 \ud800\udc61\ud802\ud800\udc61\ud802\ud800\udc61\ud802
940 true \ud800\udc61\ud802\ud800\udc61\ud802\ud800\udc61\ud802 1 \ud800\udc61\ud802
941 
942 (\ud800\udc61\ud802)+
943 \ud800\udc61ccccd
944 false 1
945 
946 (\ud800\udc61\ud802)*
947 \ud800\udc61\ud802\ud800\udc61\ud802\ud800\udc61\ud802
948 true \ud800\udc61\ud802\ud800\udc61\ud802\ud800\udc61\ud802 1 \ud800\udc61\ud802
949 
950 (\ud800\udc61b)(cd*)
951 zzz\ud800\udc61bczzz
952 true \ud800\udc61bc 2 \ud800\udc61b c
953 
954 \ud800\udc61bc(\ud804\udc04)*\ud800\udc61bc
955 \ud800\udc61bc\ud804\udc04\ud804\udc04\ud804\udc04\ud804\udc04\ud804\udc04\ud800\udc61bc
956 true \ud800\udc61bc\ud804\udc04\ud804\udc04\ud804\udc04\ud804\udc04\ud804\udc04\ud800\udc61bc 1 \ud804\udc04
957 
958 // Back references
959 (\ud800\udc61*)\ud802\udc02c\1
960 zzz\ud800\udc61\ud800\udc61\ud802\udc02c\ud800\udc61\ud800\udc61zzz
961 true \ud800\udc61\ud800\udc61\ud802\udc02c\ud800\udc61\ud800\udc61 1 \ud800\udc61\ud800\udc61
962 
963 (\ud800\udc61*)\ud802\udc02c\1
964 zzz\ud800\udc61\ud800\udc61\ud802\udc02c\ud800\udc61zzz
965 true \ud800\udc61\ud802\udc02c\ud800\udc61 1 \ud800\udc61
966 
967 (\ud800\udc07\ud800\udc14*)(\ud804\udc04\ud804\udc04e)*(yu)\1\3(vv)
968 zzz\ud800\udc07\ud800\udc14\ud800\udc14\ud804\udc04\ud804\udc04e\ud804\udc04\ud804\udc04eyu\ud800\udc07\ud800\udc14\ud800\udc14yuvvzzz
969 true \ud800\udc07\ud800\udc14\ud800\udc14\ud804\udc04\ud804\udc04e\ud804\udc04\ud804\udc04eyu\ud800\udc07\ud800\udc14\ud800\udc14yuvv 4 \ud800\udc07\ud800\udc14\ud800\udc14 \ud804\udc04\ud804\udc04e yu vv
970 
971 // Greedy * metacharacter
972 \ud800\udc61*\ud802\udc02
973 \ud800\udc61\ud800\udc61\ud800\udc61\ud800\udc61\ud802\udc02
974 true \ud800\udc61\ud800\udc61\ud800\udc61\ud800\udc61\ud802\udc02 0
975 
976 \ud800\udc61*\ud802\udc02
977 \ud802\udc02
978 true \ud802\udc02 0
979 
980 \ud800\udc61*\ud802\udc02
981 \ud800\udc61\ud800\udc61\ud800\udc61ccc
982 false 0
983 
984 .*\ud802\udc02
985 \ud800\udc61\ud800\udc61\ud800\udc61\ud800\udc61\ud802\udc02
986 true \ud800\udc61\ud800\udc61\ud800\udc61\ud800\udc61\ud802\udc02 0
987 
988 // Reluctant * metacharacter
989 \ud800\udc61*?\ud802\udc02
990 \ud800\udc61\ud800\udc61\ud800\udc61\ud800\udc61\ud802\udc02
991 true \ud800\udc61\ud800\udc61\ud800\udc61\ud800\udc61\ud802\udc02 0
992 
993 \ud800\udc61*?\ud802\udc02
994 \ud802\udc02
995 true \ud802\udc02 0
996 
997 \ud800\udc61*?\ud802\udc02
998 \ud800\udc61\ud800\udc61\ud800\udc61ccc
999 false 0
1000 
1001 .*?\ud802\udc02
1002 \ud800\udc61\ud800\udc61\ud800\udc61\ud800\udc61\ud802\udc02
1003 true \ud800\udc61\ud800\udc61\ud800\udc61\ud800\udc61\ud802\udc02 0
1004 
1005 // Possessive * metacharacter
1006 \ud800\udc61*+\ud802\udc02
1007 \ud800\udc61\ud800\udc61\ud800\udc61\ud800\udc61\ud802\udc02
1008 true \ud800\udc61\ud800\udc61\ud800\udc61\ud800\udc61\ud802\udc02 0
1009 
1010 \ud800\udc61*+\ud802\udc02
1011 \ud802\udc02
1012 true \ud802\udc02 0
1013 
1014 \ud800\udc61*+\ud802\udc02
1015 \ud800\udc61\ud800\udc61\ud800\udc61ccc
1016 false 0
1017 
1018 .*+\ud802\udc02
1019 \ud800\udc61\ud800\udc61\ud800\udc61\ud800\udc61\ud802\udc02
1020 false 0
1021 
1022 // Case insensitivity
1023 (?iu)\ud801\udc00\ud801\udc01\ud801\udc02x
1024 \ud801\udc28\ud801\udc29\ud801\udc2aX
1025 true \ud801\udc28\ud801\udc29\ud801\udc2aX 0
1026 
1027 \ud801\udc00(?iu)\ud801\udc01\ud801\udc02
1028 \ud801\udc00\ud801\udc29\ud801\udc2a
1029 true \ud801\udc00\ud801\udc29\ud801\udc2a 0
1030 
1031 \ud801\udc00(?iu)\ud801\udc01\ud801\udc02
1032 \ud801\udc28\ud801\udc29\ud801\udc2a
1033 false 0
1034 
1035 (?iu)\ud801\udc00[\ud801\udc01\ud801\udc02]+
1036 \ud801\udc28\ud801\udc29\ud801\udc2a
1037 true \ud801\udc28\ud801\udc29\ud801\udc2a 0
1038 
1039 (?iu)[\ud801\udc00-\ud801\udc02]+
1040 \ud801\udc28\ud801\udc29\ud801\udc2a
1041 true \ud801\udc28\ud801\udc29\ud801\udc2a 0
1042 
1043 // Disable metacharacters- test both length <=3 and >3
1044 // So that the BM optimization is part of test
1045 \Q***\E\ud801\udc01\ud802\udc02\ud800\udc03
1046 ***\ud801\udc01\ud802\udc02\ud800\udc03
1047 true ***\ud801\udc01\ud802\udc02\ud800\udc03 0
1048 
1049 \ud802\udc02l\Q***\E\ud801\udc01\ud802\udc02\ud800\udc03
1050 \ud802\udc02l***\ud801\udc01\ud802\udc02\ud800\udc03
1051 true \ud802\udc02l***\ud801\udc01\ud802\udc02\ud800\udc03 0
1052 
1053 \Q***\ud801\udc01\ud802\udc02\ud800\udc03
1054 ***\ud801\udc01\ud802\udc02\ud800\udc03
1055 true ***\ud801\udc01\ud802\udc02\ud800\udc03 0
1056 
1057 \ud802\udc02l\ud801\udc01h\Q***\E\ud801\udc01\ud802\udc02\ud800\udc03
1058 \ud802\udc02l\ud801\udc01h***\ud801\udc01\ud802\udc02\ud800\udc03
1059 true \ud802\udc02l\ud801\udc01h***\ud801\udc01\ud802\udc02\ud800\udc03 0
1060 
1061 \Q***\ud801\udc01\ud802\udc02\ud800\udc03
1062 ***\ud801\udc01\ud802\udc02\ud800\udc03
1063 true ***\ud801\udc01\ud802\udc02\ud800\udc03 0
1064 
1065 \Q*\ud801\udc01\ud802\udc02
1066 *\ud801\udc01\ud802\udc02
1067 true *\ud801\udc01\ud802\udc02 0
1068 
1069 \ud802\udc02l\ud801\udc01h\Q***\ud801\udc01\ud802\udc02\ud800\udc03
1070 \ud802\udc02l\ud801\udc01h***\ud801\udc01\ud802\udc02\ud800\udc03
1071 true \ud802\udc02l\ud801\udc01h***\ud801\udc01\ud802\udc02\ud800\udc03 0
1072 
1073 \ud802\udc02l\ud801\udc01\Q***\ud801\udc01\ud802\udc02\ud800\udc03
1074 \ud802\udc02l\ud801\udc01***\ud801\udc01\ud802\udc02\ud800\udc03
1075 true \ud802\udc02l\ud801\udc01***\ud801\udc01\ud802\udc02\ud800\udc03 0
1076 
1077 //Test cases below copied from i18n QE's RegexSupplementaryTests.txt
1078 \uD800\uDFFF\uD801\uDFF1\uDB00\uDC00
1079 \uD800\uDFFF\uD801\uDFF1\uDB00\uDC00
1080 true \uD800\uDFFF\uD801\uDFF1\uDB00\uDC00 0
1081 
1082 \uD800\uDFFF\uD801\uDFF1\uDB00\uDC00
1083 \u1000\uD801\uDFF1\uDB00\uDC00
1084 false 0
1085 
1086 \uD800\uDFFF\uD801\uDFF1\uDB00\uDC00
1087 \uD800\uDFFF\uFFFF\uDB00\uDC00
1088 false 0
1089 
1090 \uD800\uDFFF\uD801\uDFF1\uDB00\uDC00
1091 \uD800\uDFFF\uD801\uDFF1\uFFFF
1092 false 0
1093 
1094 \u1000.\uFFFF
1095 \u1000\uD800\uDFFF\uFFFF
1096 true \u1000\uD800\uDFFF\uFFFF 0
1097 
1098 //=======
1099 // Ranges
1100 //=======
1101 [a-\uD800\uDFFF]
1102 \uDFFF
1103 true \uDFFF 0
1104 
1105 [a-\uD800\uDFFF]
1106 \uD800
1107 true \uD800 0
1108 
1109 [a-\uD800\uDFFF]
1110 \uD800\uDFFF
1111 true \uD800\uDFFF 0
1112 
1113 [\uD800\uDC00-\uDBFF\uDFFF]
1114 \uDBFF
1115 false 0
1116 
1117 [\uD800\uDC00-\uDBFF\uDFFF]
1118 \uDC00
1119 false 0
1120 
1121 [\uD800-\uDFFF]
1122 \uD800\uDFFF
1123 false 0
1124 
1125 [\uD800-\uDFFF]
1126 \uDFFF\uD800
1127 true \uDFFF 0
1128 
1129 foo[^\uD800-\uDFFF]
1130 foo\uD800\uDFFF
1131 true foo\uD800\uDFFF 0
1132 
1133 foo[^\uD800-\uDFFF]
1134 foo\uDFFF\uD800
1135 false 0
1136 
1137 //fo\uD800[\uDC00-\uDFFF]
1138 
1139 //==================
1140 // Character Classes
1141 //==================
1142 // Simple class
1143 [ab\uD800\uDFFFcd]at
1144 \uD800at
1145 false 0
1146 
1147 [ab\uD800\uDFFFcd]at
1148 \uD800\uDFFFat
1149 true \uD800\uDFFFat 0
1150 
1151 // Negation
1152 [^\uD800\uDFFFcd]at
1153 \uD800at
1154 true \uD800at 0
1155 
1156 [^\uD800\uDFFFcd]at
1157 \uDFFFat
1158 true \uDFFFat 0
1159 
1160 // Inclusive range
1161 [\u0000-\uD800\uDFFF-\uFFFF]
1162 \uD800\uDFFF
1163 true \uD800\uDFFF 0
1164 
1165 // Unions
1166 [\u0000-\uD800[\uDFFF-\uFFFF]]
1167 \uD800\uDFFF
1168 false 0
1169 
1170 
1171 // Intersection
1172 [\u0000-\uFFFF&&[\uD800\uDFFF]]
1173 \uD800\uDFFF
1174 false 0
1175 
1176 [\u0000-\uFFFF&&[\uD800\uDFFF]]
1177 \uD800
1178 false 0
1179 
1180 [\u0000-\uFFFF&&[\uDFFF\uD800]]
1181 \uD800
1182 true \uD800 0
1183 
1184 [\u0000-\uFFFF&&[\uDFFF\uD800\uDC00]]
1185 \uDC00
1186 false 0
1187 
1188 [\u0000-\uDFFF&&[\uD800-\uFFFF]]
1189 \uD800\uDFFF
1190 false 0
1191 
1192 [\u0000-\uDFFF&&[\uD800-\uFFFF]]
1193 \uDFFF\uD800
1194 true \uDFFF 0
1195 
1196 // Subtraction
1197 [\u0000-\uD800\uDFFF&&[^\uD800\uDC00]]
1198 \uD800
1199 true \uD800 0
1200 
1201 [\u0000-\uD800\uDFFF&&[^\uD800\uDC00]]
1202 \uDC00
1203 true \uDC00 0
1204 
1205 [\u0000-\uD800\uDFFF&&[^\uD800\uDC00]]
1206 \uD800\uDFFF
1207 true \uD800\uDFFF 0
1208 
1209 [\u0000-\uD800\uDFFF&&[^\uD800\uDBFF\uDC00]]
1210 \uD800
1211 false 0
1212 
1213 [\u0000-\uD800\uDFFF&&[^\uDC00\uD800\uDBFF]]
1214 \uD800\uDC00
1215 true \uD800\uDC00 0
1216 
1217 // Quantifiers
1218 a\uD800\uDFFF?
1219 a\uD800
1220 true a 0
1221 
1222 a\uD800\uDFFF?
1223 a\uDFFF
1224 true a 0
1225 
1226 a\uD800\uDFFF?
1227 a\uD800\uDFFF
1228 true a\uD800\uDFFF 0
1229 
1230 a\uDFFF\uD800?
1231 a\uDFFF
1232 true a\uDFFF 0
1233 
1234 a\uDFFF\uD800?
1235 a\uD800
1236 false 0
1237 
1238 \uD800\uDFFF\uDC00?
1239 \uD800
1240 false 0
1241 
1242 \uD800\uDFFF\uDC00?
1243 \uD800\uDFFF
1244 true \uD800\uDFFF 0
1245 
1246 a\uD800\uDFFF??
1247 a\uDFFF
1248 true a 0
1249 
1250 a\uD800\uDFFF*
1251 a
1252 true a 0
1253 
1254 a\uD800\uDFFF*
1255 a\uD800
1256 true a 0
1257 
1258 \uD800\uDFFF*
1259 \uD800\uDFFF\uD800\uDFFF\uD800\uDFFF\uD800\uDFFF
1260 true \uD800\uDFFF\uD800\uDFFF\uD800\uDFFF\uD800\uDFFF 0
1261 
1262 \uD800\uDFFF*
1263 \uD800\uDFFF\uDFFF\uDFFF\uDFFF
1264 true \uD800\uDFFF 0
1265 
1266 \uD800*\uDFFF
1267 \uD800\uDFFF
1268 false 0
1269 
1270 a\uD800\uDFFF*
1271 a\uD800
1272 true a 0
1273 
1274 \uDFFF\uD800*
1275 \uDFFF
1276 true \uDFFF 0
1277 
1278 \uDFFF\uD800*
1279 \uDFFF\uD800\uD800\uD800
1280 true \uDFFF\uD800\uD800\uD800 0
1281 
1282 \uD800\uDFFF+
1283 \uD800\uDFFF\uDFFF\uDFFF
1284 true \uD800\uDFFF 0
1285 
1286 \uD800\uDFFF+
1287 \uD800
1288 false 0
1289 
1290 \uD800\uDFFF+
1291 \uD800\uDFFF
1292 true \uD800\uDFFF 0
1293 
1294 \uD800\uDFFF+
1295 \uD800\uDFFF\uD800\uDFFF\uD800\uDFFF
1296 true \uD800\uDFFF\uD800\uDFFF\uD800\uDFFF 0
1297 
1298 \uDFFF\uD800+
1299 \uDFFF\uD800\uDFFF\uD800
1300 false 0
1301 
1302 \uD800+\uDFFF
1303 \uD800\uDFFF
1304 false 0
1305 
1306 \uD800+\uDFFF
1307 \uD800
1308 false 0
1309 
1310 \uDFFF+\uD800
1311 \uD800
1312 false 0
1313 
1314 \uDFFF+\uD800
1315 \uDFFF\uD800
1316 true \uDFFF\uD800 0
1317 
1318 \uD800\uDFFF{3}
1319 \uD800\uDFFF\uDFFF\uDFFF
1320 false 0
1321 
1322 \uD800\uDFFF{3}
1323 \uD800\uDFFF\uD800\uDFFF\uD800\uDFFF
1324 true \uD800\uDFFF\uD800\uDFFF\uD800\uDFFF 0
1325 
1326 \uDFFF\uD800{3}
1327 \uDFFF\uD800\uDFFF\uD800\uDFFF\uD800
1328 false 0
1329 
1330 \uDFFF\uD800{3}
1331 \uDFFF\uD800\uD800\uD800
1332 true \uDFFF\uD800\uD800\uD800 0
1333 
1334 \uD800\uDFFF{2,}
1335 \uD800\uDFFF
1336 false 0
1337 
1338 \uD800\uDFFF{2,}
1339 \uD800\uDFFF\uDFFF
1340 false 0
1341 
1342 \uD800\uDFFF{2,}
1343 \uD800\uDFFF\uD800\uDFFF
1344 true \uD800\uDFFF\uD800\uDFFF 0
1345 
1346 \uDFFF\uD800{2,}
1347 \uDFFF\uD800\uDFFF\uD800
1348 false 0
1349 
1350 \uDFFF\uD800{2,}
1351 \uDFFF\uD800\uD800\uD800
1352 true \uDFFF\uD800\uD800\uD800 0
1353 
1354 \uD800\uDFFF{3,4}
1355 \uD800\uDFFF\uD800\uDFFF\uD800\uDFFF\uD800\uDFFF
1356 true \uD800\uDFFF\uD800\uDFFF\uD800\uDFFF\uD800\uDFFF 0
1357 
1358 \uD800\uDFFF{3,4}
1359 \uD800\uDFFF\uD800\uDFFF\uD800\uDFFF\uD800
1360 true \uD800\uDFFF\uD800\uDFFF\uD800\uDFFF 0
1361 
1362 \uD800\uDFFF{3,4}
1363 \uD800\uDFFF\uD800\uD800\uDFFF\uD800\uDFFF
1364 false 0
1365 
1366 \uDFFF\uD800{3,5}
1367 \uDFFF\uD800\uD800\uD800\uD800\uD800\uD800\uD800
1368 true \uDFFF\uD800\uD800\uD800\uD800\uD800 0
1369 
1370 \uD800\uDFFF{3,5}
1371 \uD800\uDFFF\uDFFF\uDFFF
1372 false 0
1373 
1374 \uD800\uDFFF{3,5}
1375 \uD800\uDFFF\uD800\uD800\uDFFF\uD800\uDFFF\uD800\uDFFF
1376 true \uD800\uDFFF\uD800\uDFFF\uD800\uDFFF 0
1377 
1378 // Groupings
1379 (\uD800(\uDFFF))
1380 \uD800\uDFFF
1381 false 2
1382 
1383 (\uD800(\uDC00)(\uDFFF))
1384 \uD800\uDC00\uDFFF
1385 false 3
1386 
1387 ((\uD800)(\uDFFF))
1388 \uD800\uDFFF
1389 false 3
1390 
1391 (\uD800(\uDFFF)\uDFFF)
1392 \uD800\uDFFF
1393 false 2
1394 
1395 (\uDFFF(\uD800)(\uDBFF))
1396 \uDFFF\uD800\uDBFF
1397 true \uDFFF\uD800\uDBFF 3 \uDFFF\uD800\uDBFF \uD800 \uDBFF
1398 
1399 (\uDFFF(\uD800)(\uDC00))
1400 \uDFFF\uD800\uDC00
1401 false 3
1402 
1403 (\uDFFF\uD800(\uDC00\uDBFF))
1404 \uDFFF\uD800\uDC00\uDBFF
1405 false 2
1406 
1407 (\uD800\uDFFF(\uDBFF)(\uDC00))
1408 \uD800\uDFFF\uDBFF\uDC00
1409 false 3
1410 
1411 (\uD800\uDFFF(\uDBFF\uDC00))
1412 \uD800\uDFFF\uDBFF\uDC00
1413 true \uD800\uDFFF\uDBFF\uDC00 2 \uD800\uDFFF\uDBFF\uDC00 \uDBFF\uDC00