114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson/* 214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson * Licensed to the Apache Software Foundation (ASF) under one or more 314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson * contributor license agreements. See the NOTICE file distributed with 414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson * this work for additional information regarding copyright ownership. 514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson * The ASF licenses this file to You under the Apache License, Version 2.0 614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson * (the "License"); you may not use this file except in compliance with 714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson * the License. You may obtain a copy of the License at 814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson * 914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson * http://www.apache.org/licenses/LICENSE-2.0 1014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson * 1114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson * Unless required by applicable law or agreed to in writing, software 1214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson * distributed under the License is distributed on an "AS IS" BASIS, 1314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson * See the License for the specific language governing permissions and 1514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson * limitations under the License. 1614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson */ 1714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 184557728efb66c455a52b7669a8eefef7a9e54854Jesse Wilsonpackage libcore.java.util.regex; 1914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 20eb9689bf8aee71f16fbe22a2c90d25628dd431ecElliott Hughesimport java.util.ArrayList; 214557728efb66c455a52b7669a8eefef7a9e54854Jesse Wilsonimport java.util.regex.Matcher; 224557728efb66c455a52b7669a8eefef7a9e54854Jesse Wilsonimport java.util.regex.Pattern; 2369860bf2b28f0e14741a8895abdb77b45d1ed55dPrzemyslaw Szczepaniakimport java.util.regex.PatternSyntaxException; 244557728efb66c455a52b7669a8eefef7a9e54854Jesse Wilsonimport junit.framework.TestCase; 2514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 2614816f17144d90174628ee82dc616d4b9c921149Jesse Wilsonpublic class OldMatcherTest extends TestCase { 2714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson String[] groupPatterns = { "(a|b)*aabb", "((a)|b)*aabb", "((a|b)*)a(abb)", 2814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson "(((a)|(b))*)aabb", "(((a)|(b))*)aa(b)b", "(((a)|(b))*)a(a(b)b)" }; 2914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 3014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson public void testAppendReplacement() { 3114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson Pattern pat = Pattern.compile("XX"); 3214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson Matcher m = pat.matcher("Today is XX-XX-XX ..."); 3314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson StringBuffer sb = new StringBuffer(); 3414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 3514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson for (int i = 0; m.find(); i++) { 3614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson m.appendReplacement(sb, new Integer(i * 10 + i).toString()); 3714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson } 3814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson m.appendTail(sb); 3914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertEquals("Today is 0-11-22 ...", sb.toString()); 4014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 4114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson pat = Pattern.compile("cat"); 4214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson m = pat.matcher("one-cat-two-cats-in-the-yard"); 4314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson sb = new StringBuffer(); 4414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson Throwable t = null; 4514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson m.find(); 4614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson try { 4714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson m.appendReplacement(null, "dog"); 4814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson } catch (NullPointerException e) { 4914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson t = e; 5014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson } 5114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertNotNull(t); 5214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson t = null; 5314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson m.find(); 5414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson try { 5514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson m.appendReplacement(sb, null); 5614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson } catch (NullPointerException e) { 5714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson t = e; 5814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson } 5914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertNotNull(t); 6014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson } 6114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 6214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson public void test_resetLjava_lang_String() { 6314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson String testPattern = "(abb)"; 6414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson String testString1 = "babbabbcccabbabbabbabbabb"; 6514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson String testString2 = "cddcddcddcddcddbbbb"; 6614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson Pattern pat = Pattern.compile(testPattern); 6714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson Matcher mat = pat.matcher(testString1); 6814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 6914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson while (mat.find()); 7014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertEquals("Reset should return itself 1", mat, mat.reset(testString2)); 7114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertFalse("After reset matcher should not find pattern in given input", mat.find()); 7214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertEquals("Reset should return itself 2", mat, mat.reset(testString1)); 7314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertTrue("After reset matcher should find pattern in given input", mat.find()); 7414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson } 7514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 7614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson public void testAppendTail() { 7714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson Pattern p = Pattern.compile("cat"); 7814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson Matcher m = p.matcher("one-cat-two-cats-in-the-yard"); 7914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson StringBuffer sb = new StringBuffer(); 8014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson while (m.find()) { 8114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson m.appendReplacement(sb, "dog"); 8214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson } 8314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson m.appendTail(sb); 8414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertEquals("one-dog-two-dogs-in-the-yard", sb.toString()); 8514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 8614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson p = Pattern.compile("cat|yard"); 8714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson m = p.matcher("one-cat-two-cats-in-the-yard"); 8814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson sb = new StringBuffer(); 8914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson while (m.find()) { 9014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson m.appendReplacement(sb, "dog"); 9114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson } 9214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertEquals("one-dog-two-dogs-in-the-dog", sb.toString()); 9314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson m.appendTail(sb); 9414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertEquals("one-dog-two-dogs-in-the-dog", sb.toString()); 9514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 9614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson p = Pattern.compile("cat"); 9714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson m = p.matcher("one-cat-two-cats-in-the-yard"); 9814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson sb = new StringBuffer(); 9914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson while (m.find()) { 10014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson m.appendReplacement(sb, "dog"); 10114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson } 10214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson Throwable t = null; 10314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson try { 10414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson m.appendTail(null); 10514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson } catch (NullPointerException e) { 10614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson t = e; 10714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson } 10814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertNotNull(t); 10914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson } 11014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 11114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson public void test_reset() { 11214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson String testPattern = "(abb)"; 11314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson String testString = "babbabbcccabbabbabbabbabb"; 11414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson Pattern pat = Pattern.compile(testPattern); 11514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson Matcher mat = pat.matcher(testString); 11614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 11714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson while (mat.find()); 11814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertEquals("Reset should return itself", mat, mat.reset()); 11914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertTrue("After reset matcher should find pattern in given input", mat.find()); 12014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson } 12114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 12214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson public void test_hasAnchoringBounds() { 12314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson String testPattern = "abb"; 12414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson String testString = "abb"; 12514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson Pattern pat = Pattern.compile(testPattern); 12614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson Matcher mat = pat.matcher(testString); 12714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 12814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertTrue("Matcher uses anchoring bound by default", 12914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson mat.hasAnchoringBounds()); 13014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 13114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson Matcher mu = mat.useAnchoringBounds(true); 13214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertTrue("Incorrect value of anchoring bounds", 13314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson mu.hasAnchoringBounds()); 13414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 13514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson mu = mat.useAnchoringBounds(false); 13614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertFalse("Incorrect value of anchoring bounds", 13714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson mu.hasAnchoringBounds()); 13814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson } 13914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 14014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson public void test_hasTransparentBounds() { 14114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson String testPattern = "abb"; 14214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson String testString = "ab\nb"; 14314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson Pattern pat = Pattern.compile(testPattern); 14414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson Matcher mat = pat.matcher(testString); 14514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 14614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertFalse("Matcher uses opaque bounds by default", 14714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson mat.hasTransparentBounds()); 14814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 14914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson Matcher mu = mat.useTransparentBounds(true); 15014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertTrue("Incorrect value of anchoring bounds", 15114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson mu.hasTransparentBounds()); 15214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 15314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson mu = mat.useTransparentBounds(false); 15414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertFalse("Incorrect value of anchoring bounds", 15514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson mu.hasTransparentBounds()); 15614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson } 15714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 15814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson public void test_startI() { 15914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson String testPattern = "(((abb)a)(bb))"; 16014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson String testString = "cccabbabbabbabbabb"; 16114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson Pattern pat = Pattern.compile(testPattern); 16214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson Matcher mat = pat.matcher(testString); 16314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson int start = 3; 16414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson int end = 6; 16514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson int i, j; 16614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 16714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson for (j = 0; j < 3; j++) { 16814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson while (mat.find(start + j - 2)) { 16914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson for (i = 0; i < 4; i++) { 17014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertEquals("Start is wrong for group " + i + " :" + mat.group(i), start, mat.start(i)); 17114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson } 17214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertEquals("Start is wrong for group " + i + " :" + mat.group(i), start + 4, mat.start(i)); 17314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 17414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson start = end; 17514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson end += 3; 17614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson } 17714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson } 17814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson } 17914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 18014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson public void test_endI() { 18114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson String testPattern = "(((abb)a)(bb))"; 18214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson String testString = "cccabbabbabbabbabb"; 18314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson Pattern pat = Pattern.compile(testPattern); 18414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson Matcher mat = pat.matcher(testString); 18514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson int start = 3; 18614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson int end = 6; 18714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson int i, j; 18814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 18914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson for (j = 0; j < 3; j++) { 19014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson while (mat.find(start + j - 2)) { 19114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson for (i = 0; i < 4; i++) { 19214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertEquals("End is wrong for group " + i + " :" + mat.group(i), start + mat.group(i).length(), mat.end(i)); 19314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson } 19414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertEquals("End is wrong for group " + i + " :" + mat.group(i), start + 4 + mat.group(i).length(), mat.end(i)); 19514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 19614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson start = end; 19714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson end += 3; 19814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson } 19914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson } 20014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson } 20114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 20214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 20314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson public void test_lookingAt() { 20414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson String testPattern = "(((abb)a)(bb))"; 20514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson String testString1 = "babbabbcccabbabbabbabbabb"; 20614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson String testString2 = "abbabb"; 20714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson Pattern pat = Pattern.compile(testPattern); 20814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson Matcher mat1 = pat.matcher(testString1); 20914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson Matcher mat2 = pat.matcher(testString2); 21014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 21114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertFalse("Should not find given pattern in 1 string", mat1.lookingAt()); 21214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson mat1.region(1, 10); 21314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertTrue("Should find given pattern in region of string", mat1.lookingAt()); 21414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertTrue("Should find given pattern in 2 string", mat2.lookingAt()); 21514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson } 21614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 21714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson public void test_findI() { 21814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson String testPattern = "(abb)"; 21914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson String testString = "cccabbabbabbabbabb"; 22014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson Pattern pat = Pattern.compile(testPattern); 22114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson Matcher mat = pat.matcher(testString); 22214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson int start = 3; 22314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson int end = 6; 22414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson int j; 22514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 22614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson for (j = 0; j < 3; j++) { 22714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson while (mat.find(start + j - 2)) { 22814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertEquals(start, mat.start(1)); 22914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertEquals(end, mat.end(1)); 23014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 23114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson start = end; 23214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson end += 3; 23314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson } 23414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson start = 6; 23514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson end = 9; 23614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson } 23714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 23814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson testPattern = "(\\d{1,3})"; 23914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson testString = "aaaa123456789045"; 24014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 24114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson Pattern pat2 = Pattern.compile(testPattern); 24214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson Matcher mat2 = pat2.matcher(testString); 24314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson start = 4; 24414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson int length = 3; 24514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson for (j = 0; j < length; j++) { 24614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson for (int i = 4 + j; i < testString.length() - length; i += length) { 24714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson mat2.find(i); 24814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertEquals(testString.substring(i, i + length), mat2.group(1)); 24914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson } 25014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson } 25114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 25291cd2eae0c1fd2e04d46876856b33b8324aa8b5fElliott Hughes String string3 = "Brave new world"; 25314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson Pattern pat3 = Pattern.compile("new"); 25491cd2eae0c1fd2e04d46876856b33b8324aa8b5fElliott Hughes Matcher mat3 = pat3.matcher(string3); 25591cd2eae0c1fd2e04d46876856b33b8324aa8b5fElliott Hughes 25691cd2eae0c1fd2e04d46876856b33b8324aa8b5fElliott Hughes // find(int) throws for out of range indexes. 25791cd2eae0c1fd2e04d46876856b33b8324aa8b5fElliott Hughes try { 25891cd2eae0c1fd2e04d46876856b33b8324aa8b5fElliott Hughes mat3.find(-1); 25991cd2eae0c1fd2e04d46876856b33b8324aa8b5fElliott Hughes fail(); 26091cd2eae0c1fd2e04d46876856b33b8324aa8b5fElliott Hughes } catch (IndexOutOfBoundsException expected) { 26191cd2eae0c1fd2e04d46876856b33b8324aa8b5fElliott Hughes } 26291cd2eae0c1fd2e04d46876856b33b8324aa8b5fElliott Hughes assertFalse(mat3.find(string3.length())); 26391cd2eae0c1fd2e04d46876856b33b8324aa8b5fElliott Hughes try { 26491cd2eae0c1fd2e04d46876856b33b8324aa8b5fElliott Hughes mat3.find(string3.length() + 1); 26591cd2eae0c1fd2e04d46876856b33b8324aa8b5fElliott Hughes fail(); 26691cd2eae0c1fd2e04d46876856b33b8324aa8b5fElliott Hughes } catch (IndexOutOfBoundsException expected) { 26791cd2eae0c1fd2e04d46876856b33b8324aa8b5fElliott Hughes } 26814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 26914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertTrue(mat3.find(6)); 27014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertFalse(mat3.find(7)); 27114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 27214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson mat3.region(7, 10); 27391cd2eae0c1fd2e04d46876856b33b8324aa8b5fElliott Hughes assertFalse(mat3.find()); // No "new" in the region. 27414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 27591cd2eae0c1fd2e04d46876856b33b8324aa8b5fElliott Hughes assertTrue(mat3.find(3)); // find(int) ignores the region. 27691cd2eae0c1fd2e04d46876856b33b8324aa8b5fElliott Hughes assertTrue(mat3.find(6)); // find(int) ignores the region. 27791cd2eae0c1fd2e04d46876856b33b8324aa8b5fElliott Hughes assertFalse(mat3.find(7)); // No "new" >= 7. 27891cd2eae0c1fd2e04d46876856b33b8324aa8b5fElliott Hughes 27991cd2eae0c1fd2e04d46876856b33b8324aa8b5fElliott Hughes mat3.region(1, 4); 28091cd2eae0c1fd2e04d46876856b33b8324aa8b5fElliott Hughes assertFalse(mat3.find()); // No "new" in the region. 28191cd2eae0c1fd2e04d46876856b33b8324aa8b5fElliott Hughes assertTrue(mat3.find(5)); // find(int) ignores the region. 28214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson } 283ceacc61d16fe3aec9c805de525a79f547e607a27Elliott Hughes 28414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson public void testSEOLsymbols() { 28514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson Pattern pat = Pattern.compile("^a\\(bb\\[$"); 28614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson Matcher mat = pat.matcher("a(bb["); 28714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 28814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertTrue(mat.matches()); 28914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson } 29014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 29114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson public void test_start() { 29214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson String testPattern = "(abb)"; 29314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson String testString = "cccabbabbabbabbabb"; 29414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson Pattern pat = Pattern.compile(testPattern); 29514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson Matcher mat = pat.matcher(testString); 29614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson int start = 3; 29714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson int end = 6; 29814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson int j; 29914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 30014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson for (j = 0; j < 3; j++) { 30114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson while (mat.find()) { 30214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertEquals("Start is wrong", start, mat.start()); 30314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 30414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson start = end; 30514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson end += 3; 30614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson } 30714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson } 30814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson } 30914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 31014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson public void test_end() { 31114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson String testPattern = "(abb)"; 31214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson String testString = "cccabbabbabbabbabb"; 31314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson Pattern pat = Pattern.compile(testPattern); 31414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson Matcher mat = pat.matcher(testString); 31514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson int start = 3; 31614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson int end = 6; 31714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson int j; 31814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 31914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson for (j = 0; j < 3; j++) { 32014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson while (mat.find()) { 32114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertEquals("Start is wrong", end, mat.end()); 32214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 32314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson start = end; 32414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson end += 3; 32514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson } 32614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson } 32714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson } 328ceacc61d16fe3aec9c805de525a79f547e607a27Elliott Hughes 32914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson public void testGroupCount() { 33014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson for (int i = 0; i < groupPatterns.length; i++) { 33114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson Pattern test = Pattern.compile(groupPatterns[i]); 33214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson Matcher mat = test.matcher("ababababbaaabb"); 33314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson mat.matches(); 33414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertEquals(i + 1, mat.groupCount()); 33514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson } 33614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson } 33714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 33814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 33914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson public void testRegion() { 34014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson Pattern p = Pattern.compile("abba"); 34114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson Matcher m = p.matcher("Gabba gabba hey"); 34214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 34314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson m.region(0, 15); 34414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertTrue(m.find()); 34514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertTrue(m.find()); 34614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertFalse(m.find()); 34714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 34814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson m.region(5, 15); 34914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertTrue(m.find()); 35014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertFalse(m.find()); 35114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 35214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson m.region(10, 15); 35314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertFalse(m.find()); 35414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 35514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson Throwable t = null; 35614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 35714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson try { 35814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson m.region(-1, 15); 35914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson } catch (IndexOutOfBoundsException e) { 36014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson t = e; 36114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson } 36214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertNotNull(t); 36314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 36414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson t = null; 36514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson try { 36614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson m.region(0, 16); 36714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson } catch (IndexOutOfBoundsException e) { 36814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson t = e; 36914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson } 37014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertNotNull(t); 37114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson } 37214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 37314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 37414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson public void testMatchesURI() { 37514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson Pattern pat = Pattern. 37614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson compile("^(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?"); 37714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson Matcher mat = pat 37814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson .matcher("file:/c:/workspace/api/build.win32/classes/META-INF/" 37914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson + "services/javax.xml.parsers.DocumentBuilderFactory"); 38014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertTrue(mat.matches()); 38114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson } 38214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 38314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 38414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson public void testQuoteReplacement() { 38514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertEquals("\\$dollar and slash\\\\", Matcher.quoteReplacement("$dollar and slash\\")); 38614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson } 38714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 38814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson public void testUnicode() { 38914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 39014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertTrue(Pattern.compile("\\x61a").matcher("aa").matches()); 39114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson// assertTrue(Pattern.matches("\\u0061a", "aa")); 39214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertTrue(Pattern.compile("\\0141a").matcher("aa").matches()); 39314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertTrue(Pattern.compile("\\0777").matcher("?7").matches()); 39414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 39514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson } 396ceacc61d16fe3aec9c805de525a79f547e607a27Elliott Hughes 39714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson public void testUnicodeCategory() { 39814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertTrue(Pattern.compile("\\p{Ll}").matcher("k").matches()); // Unicode lower case 39914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertTrue(Pattern.compile("\\P{Ll}").matcher("K").matches()); // Unicode non-lower 40014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson // case 40114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertTrue(Pattern.compile("\\p{Lu}").matcher("K").matches()); // Unicode upper case 40214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertTrue(Pattern.compile("\\P{Lu}").matcher("k").matches()); // Unicode non-upper 40314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson // case 40414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson // combinations 40514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertTrue(Pattern.compile("[\\p{L}&&[^\\p{Lu}]]").matcher("k").matches()); 40614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertTrue(Pattern.compile("[\\p{L}&&[^\\p{Ll}]]").matcher("K").matches()); 40714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertFalse(Pattern.compile("[\\p{L}&&[^\\p{Lu}]]").matcher("K").matches()); 40814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertFalse(Pattern.compile("[\\p{L}&&[^\\p{Ll}]]").matcher("k").matches()); 40914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 41014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson // category/character combinations 41114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertFalse(Pattern.compile("[\\p{L}&&[^a-z]]").matcher("k").matches()); 41214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertTrue(Pattern.compile("[\\p{L}&&[^a-z]]").matcher("K").matches()); 41314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 41414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertTrue(Pattern.compile("[\\p{Lu}a-z]").matcher("k").matches()); 41514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertTrue(Pattern.compile("[a-z\\p{Lu}]").matcher("k").matches()); 41614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 41714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertFalse(Pattern.compile("[\\p{Lu}a-d]").matcher("k").matches()); 41814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertTrue(Pattern.compile("[a-d\\p{Lu}]").matcher("K").matches()); 41914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 42014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson // assertTrue(Pattern.matches("[\\p{L}&&[^\\p{Lu}&&[^K]]]", "K")); 42114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertFalse(Pattern.compile("[\\p{L}&&[^\\p{Lu}&&[^G]]]").matcher("K").matches()); 42214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 42314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson } 42414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 42514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson public void test_regionStart() { 42614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson String testPattern = "(abb)"; 42714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson String testString = "cccabbabbabbabbabb"; 42814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson Pattern pat = Pattern.compile(testPattern); 42914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson Matcher mat = pat.matcher(testString); 43014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 43114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertEquals("Region sould start from 0 position", 0, mat.regionStart()); 43214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson mat.region(1, 10); 43314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertEquals("Region sould start from 1 position after setting new region", 1, mat.regionStart()); 43414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson mat.reset(); 43514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertEquals("Region sould start from 0 position after reset", 0, mat.regionStart()); 43614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson } 43714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 43814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson public void test_regionEnd() { 43914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson String testPattern = "(abb)"; 44014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson String testString = "cccabbabbabbabbabb"; 44114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson Pattern pat = Pattern.compile(testPattern); 44214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson Matcher mat = pat.matcher(testString); 44314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 44414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertEquals("Region end value should be equal to string length", testString.length(), mat.regionEnd()); 44514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson mat.region(1, 10); 44614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertEquals("Region end value should be equal to 10 after setting new region", 10, mat.regionEnd()); 44714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson mat.reset(); 44814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertEquals("Region end value should be equal to string length after reset", testString.length(), mat.regionEnd()); 44914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson } 45014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 45114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson public void test_toMatchResult() { 45214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson String testPattern = "(((abb)a)(bb))"; 45314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson String testString = "babbabbcccabbabbabbabbabb"; 45414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson Pattern pat = Pattern.compile(testPattern); 45514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson Matcher mat = pat.matcher(testString); 45614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 45714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson mat.region(1, 7); 45814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertTrue("matcher should find pattern in given region", mat.matches()); 45914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertEquals("matched section should start from 1 position", 1, mat.toMatchResult().start()); 46014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertEquals("matched section for 2 group should start from 1 position", 1, mat.toMatchResult().start(2)); 46114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertEquals("matched section for whole pattern should end on 7 position", 7, mat.toMatchResult().end()); 46214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertEquals("matched section for 3 group should end at 4 position", 4, mat.toMatchResult().end(3)); 46314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertEquals("group not matched", "abbabb", mat.toMatchResult().group()); 46414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertEquals("3 group not matched", "abb", mat.toMatchResult().group(3)); 46514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertEquals("Total number of groups does not matched with given pattern", 4, mat.toMatchResult().groupCount()); 46614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson } 46714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 46814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson public void test_usePatternLjava_util_regex_Pattern() { 46914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson String testPattern1 = "(((abb)a)(bb))"; 47014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson String testPattern2 = "(abbabb)"; 47114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson String testPattern3 = "(babb)"; 47214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson String testString = "babbabbcccabbabbabbabbabb"; 47314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson Pattern pat = Pattern.compile(testPattern1); 47414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson Matcher mat = pat.matcher(testString); 47514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 47614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson mat.region(1, 7); 47714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertTrue("matcher should find pattern in given region in case of groupe in pattern", mat.matches()); 47814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertEquals("", mat, mat.usePattern(Pattern.compile(testPattern2))); 47914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertTrue("matcher should find pattern in given region", mat.matches()); 48014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertEquals("", mat, mat.usePattern(Pattern.compile(testPattern3))); 48114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertFalse("matcher should not find pattern in given region", mat.matches()); 48214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson } 48314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 48414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson public void test_anchoringBounds() { 48514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson String testPattern = "^ro$"; 48614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson String testString = "android"; 48714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson Pattern pat = Pattern.compile(testPattern); 48814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson Matcher mat = pat.matcher(testString); 48914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 49014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson mat.region(2, 5); 49114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson mat.useAnchoringBounds(false); 49214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertFalse("Shouldn't find pattern with non-anchoring bounds", mat.find(0)); 49314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 49414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson mat.region(2, 5); 49514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson mat.useAnchoringBounds(true); 49614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertFalse("Should find pattern with anchoring bounds", mat.find(0)); 49714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson } 49814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 49914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson public void test_transparentBounds() { 50014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson String testPattern = "and(?=roid)"; 50114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson String testString = "android"; 50214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson Pattern pat = Pattern.compile(testPattern); 50314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson Matcher mat = pat.matcher(testString); 50414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 50514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson mat.region(0, 3); 50614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson mat.useTransparentBounds(false); 50714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertFalse("Shouldn't find pattern with opaque bounds", mat.matches()); 50814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 50914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson mat.useTransparentBounds(true); 51014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertTrue("Should find pattern transparent bounds", mat.matches()); // *** 51114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 51214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson testPattern = "and(?!roid)"; 51314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson testString = "android"; 51414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson pat = Pattern.compile(testPattern); 51514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson mat = pat.matcher(testString); 51614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 51714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson mat.region(0, 3); 51814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson mat.useTransparentBounds(false); 51914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertTrue("Should find pattern with opaque bounds", mat.matches()); 52014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 52114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson mat.useTransparentBounds(true); 52214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertFalse("Shouldn't find pattern transparent bounds", mat.matches()); // *** 52314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson } 52414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 52514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson public void test_hitEnd() { 52614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson String testPattern = "abb"; 52714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson String testString = "babbabbcccabbabbabbabbabb"; 52814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson Pattern pat = Pattern.compile(testPattern); 52914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson Matcher mat = pat.matcher(testString); 53014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 53114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson while (mat.find()) { 53214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertFalse("hitEnd should return false during parsing input", mat.hitEnd()); 53314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson } 53414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertTrue("hitEnd should return true after finding last match", mat.hitEnd()); // *** 53514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson } 53614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 53714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson public void test_requireEnd() { 53814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson String testPattern = "bba"; 53914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson String testString = "abbbbba"; 54014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson Pattern pat = Pattern.compile(testPattern); 54114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson Matcher mat = pat.matcher(testString); 54214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 54314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertTrue(mat.find()); 54414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertFalse(mat.requireEnd()); 54514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 54614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson testPattern = "bba$"; 54714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson testString = "abbbbba"; 54814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson pat = Pattern.compile(testPattern); 54914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson mat = pat.matcher(testString); 55014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 55114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertTrue(mat.find()); 55214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertTrue(mat.requireEnd()); 55314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson } 55414816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 55514816f17144d90174628ee82dc616d4b9c921149Jesse Wilson /* 55614816f17144d90174628ee82dc616d4b9c921149Jesse Wilson * Regression test for HARMONY-674 55714816f17144d90174628ee82dc616d4b9c921149Jesse Wilson */ 55814816f17144d90174628ee82dc616d4b9c921149Jesse Wilson public void testPatternMatcher() throws Exception { 55914816f17144d90174628ee82dc616d4b9c921149Jesse Wilson Pattern pattern = Pattern.compile("(?:\\d+)(?:pt)"); 56014816f17144d90174628ee82dc616d4b9c921149Jesse Wilson assertTrue(pattern.matcher("14pt").matches()); 56114816f17144d90174628ee82dc616d4b9c921149Jesse Wilson } 56214816f17144d90174628ee82dc616d4b9c921149Jesse Wilson 563953dfe37db00b2610807c3f895c72183c7ce5b14Elliott Hughes public void testUnicodeCharacterClasses() throws Exception { 564953dfe37db00b2610807c3f895c72183c7ce5b14Elliott Hughes // http://code.google.com/p/android/issues/detail?id=21176 565953dfe37db00b2610807c3f895c72183c7ce5b14Elliott Hughes // We use the Unicode TR-18 definitions: http://www.unicode.org/reports/tr18/#Compatibility_Properties 566953dfe37db00b2610807c3f895c72183c7ce5b14Elliott Hughes assertTrue("\u0666".matches("\\d")); // ARABIC-INDIC DIGIT SIX 567953dfe37db00b2610807c3f895c72183c7ce5b14Elliott Hughes assertFalse("\u0666".matches("\\D")); // ARABIC-INDIC DIGIT SIX 568953dfe37db00b2610807c3f895c72183c7ce5b14Elliott Hughes assertTrue("\u1680".matches("\\s")); // OGHAM SPACE MARK 569953dfe37db00b2610807c3f895c72183c7ce5b14Elliott Hughes assertFalse("\u1680".matches("\\S")); // OGHAM SPACE MARK 570953dfe37db00b2610807c3f895c72183c7ce5b14Elliott Hughes assertTrue("\u00ea".matches("\\w")); // LATIN SMALL LETTER E WITH CIRCUMFLEX 571953dfe37db00b2610807c3f895c72183c7ce5b14Elliott Hughes assertFalse("\u00ea".matches("\\W")); // LATIN SMALL LETTER E WITH CIRCUMFLEX 572953dfe37db00b2610807c3f895c72183c7ce5b14Elliott Hughes } 573eb9689bf8aee71f16fbe22a2c90d25628dd431ecElliott Hughes 574eb9689bf8aee71f16fbe22a2c90d25628dd431ecElliott Hughes // http://code.google.com/p/android/issues/detail?id=41143 575eb9689bf8aee71f16fbe22a2c90d25628dd431ecElliott Hughes public void testConcurrentMatcherAccess() throws Exception { 576eb9689bf8aee71f16fbe22a2c90d25628dd431ecElliott Hughes final Pattern p = Pattern.compile("(^|\\W)([a-z])"); 577eb9689bf8aee71f16fbe22a2c90d25628dd431ecElliott Hughes final Matcher m = p.matcher(""); 578eb9689bf8aee71f16fbe22a2c90d25628dd431ecElliott Hughes 579eb9689bf8aee71f16fbe22a2c90d25628dd431ecElliott Hughes ArrayList<Thread> threads = new ArrayList<Thread>(); 5805e5169a394fd431609c3419bb4052e71dc73fed3Tobias Thierer for (int i = 0; i < 5; ++i) { 581eb9689bf8aee71f16fbe22a2c90d25628dd431ecElliott Hughes Thread t = new Thread(new Runnable() { 582eb9689bf8aee71f16fbe22a2c90d25628dd431ecElliott Hughes public void run() { 5835e5169a394fd431609c3419bb4052e71dc73fed3Tobias Thierer for (int i = 0; i < 1024; ++i) { 584eb9689bf8aee71f16fbe22a2c90d25628dd431ecElliott Hughes String s = "some example text"; 585eb9689bf8aee71f16fbe22a2c90d25628dd431ecElliott Hughes m.reset(s); 586eb9689bf8aee71f16fbe22a2c90d25628dd431ecElliott Hughes try { 587eb9689bf8aee71f16fbe22a2c90d25628dd431ecElliott Hughes StringBuffer sb = new StringBuffer(s.length()); 588eb9689bf8aee71f16fbe22a2c90d25628dd431ecElliott Hughes while (m.find()) { 589eb9689bf8aee71f16fbe22a2c90d25628dd431ecElliott Hughes m.appendReplacement(sb, m.group(1) + m.group(2)); 590eb9689bf8aee71f16fbe22a2c90d25628dd431ecElliott Hughes } 591eb9689bf8aee71f16fbe22a2c90d25628dd431ecElliott Hughes m.appendTail(sb); 592eb9689bf8aee71f16fbe22a2c90d25628dd431ecElliott Hughes } catch (Exception expected) { 593eb9689bf8aee71f16fbe22a2c90d25628dd431ecElliott Hughes // This code is inherently unsafe and crazy; 594eb9689bf8aee71f16fbe22a2c90d25628dd431ecElliott Hughes // we're just trying to provoke native crashes! 595eb9689bf8aee71f16fbe22a2c90d25628dd431ecElliott Hughes } 596eb9689bf8aee71f16fbe22a2c90d25628dd431ecElliott Hughes } 597eb9689bf8aee71f16fbe22a2c90d25628dd431ecElliott Hughes } 598eb9689bf8aee71f16fbe22a2c90d25628dd431ecElliott Hughes }); 599eb9689bf8aee71f16fbe22a2c90d25628dd431ecElliott Hughes threads.add(t); 600eb9689bf8aee71f16fbe22a2c90d25628dd431ecElliott Hughes } 601eb9689bf8aee71f16fbe22a2c90d25628dd431ecElliott Hughes 602eb9689bf8aee71f16fbe22a2c90d25628dd431ecElliott Hughes for (Thread t : threads) { 603eb9689bf8aee71f16fbe22a2c90d25628dd431ecElliott Hughes t.start(); 604eb9689bf8aee71f16fbe22a2c90d25628dd431ecElliott Hughes } 605eb9689bf8aee71f16fbe22a2c90d25628dd431ecElliott Hughes for (Thread t : threads) { 606eb9689bf8aee71f16fbe22a2c90d25628dd431ecElliott Hughes t.join(); 607eb9689bf8aee71f16fbe22a2c90d25628dd431ecElliott Hughes } 608eb9689bf8aee71f16fbe22a2c90d25628dd431ecElliott Hughes } 609d475c44c493d219eb8e3caa6c1c8aadb0ee3c2e7Elliott Hughes 610d475c44c493d219eb8e3caa6c1c8aadb0ee3c2e7Elliott Hughes // https://code.google.com/p/android/issues/detail?id=33040 611d475c44c493d219eb8e3caa6c1c8aadb0ee3c2e7Elliott Hughes public void test33040() throws Exception { 612d475c44c493d219eb8e3caa6c1c8aadb0ee3c2e7Elliott Hughes Pattern p = Pattern.compile("ma"); 613d475c44c493d219eb8e3caa6c1c8aadb0ee3c2e7Elliott Hughes // replaceFirst resets the region; apparently, this was broken in Android 1.6. 614d475c44c493d219eb8e3caa6c1c8aadb0ee3c2e7Elliott Hughes String result = p.matcher("mama").region(2, 4).replaceFirst("mi"); 615d475c44c493d219eb8e3caa6c1c8aadb0ee3c2e7Elliott Hughes assertEquals("mima", result); 616d475c44c493d219eb8e3caa6c1c8aadb0ee3c2e7Elliott Hughes } 61769860bf2b28f0e14741a8895abdb77b45d1ed55dPrzemyslaw Szczepaniak 61869860bf2b28f0e14741a8895abdb77b45d1ed55dPrzemyslaw Szczepaniak public void testNamedGroupCapture() throws Exception { 61969860bf2b28f0e14741a8895abdb77b45d1ed55dPrzemyslaw Szczepaniak Matcher m = Pattern.compile("(?<first>[a-f]*)(?<second>[h-k]*)") 62069860bf2b28f0e14741a8895abdb77b45d1ed55dPrzemyslaw Szczepaniak .matcher("abcdefhkhk"); 62169860bf2b28f0e14741a8895abdb77b45d1ed55dPrzemyslaw Szczepaniak 62269860bf2b28f0e14741a8895abdb77b45d1ed55dPrzemyslaw Szczepaniak assertTrue(m.matches()); 62369860bf2b28f0e14741a8895abdb77b45d1ed55dPrzemyslaw Szczepaniak assertEquals("abcdef", m.group("first")); 62469860bf2b28f0e14741a8895abdb77b45d1ed55dPrzemyslaw Szczepaniak assertEquals(0, m.start("first")); 62569860bf2b28f0e14741a8895abdb77b45d1ed55dPrzemyslaw Szczepaniak assertEquals(6, m.end("first")); 62669860bf2b28f0e14741a8895abdb77b45d1ed55dPrzemyslaw Szczepaniak 62769860bf2b28f0e14741a8895abdb77b45d1ed55dPrzemyslaw Szczepaniak assertEquals("hkhk", m.group("second")); 62869860bf2b28f0e14741a8895abdb77b45d1ed55dPrzemyslaw Szczepaniak assertEquals(6, m.start("second")); 62969860bf2b28f0e14741a8895abdb77b45d1ed55dPrzemyslaw Szczepaniak assertEquals(10, m.end("second")); 63069860bf2b28f0e14741a8895abdb77b45d1ed55dPrzemyslaw Szczepaniak 63169860bf2b28f0e14741a8895abdb77b45d1ed55dPrzemyslaw Szczepaniak try { 63269860bf2b28f0e14741a8895abdb77b45d1ed55dPrzemyslaw Szczepaniak m.group("third"); 63369860bf2b28f0e14741a8895abdb77b45d1ed55dPrzemyslaw Szczepaniak fail(); 63469860bf2b28f0e14741a8895abdb77b45d1ed55dPrzemyslaw Szczepaniak } catch (IllegalArgumentException expected) {} 63569860bf2b28f0e14741a8895abdb77b45d1ed55dPrzemyslaw Szczepaniak 63669860bf2b28f0e14741a8895abdb77b45d1ed55dPrzemyslaw Szczepaniak try { 63769860bf2b28f0e14741a8895abdb77b45d1ed55dPrzemyslaw Szczepaniak Pattern.compile("(?<>[a-f]*)"); 63869860bf2b28f0e14741a8895abdb77b45d1ed55dPrzemyslaw Szczepaniak fail(); 63969860bf2b28f0e14741a8895abdb77b45d1ed55dPrzemyslaw Szczepaniak } catch(PatternSyntaxException expected) {} 64069860bf2b28f0e14741a8895abdb77b45d1ed55dPrzemyslaw Szczepaniak } 64169860bf2b28f0e14741a8895abdb77b45d1ed55dPrzemyslaw Szczepaniak 64269860bf2b28f0e14741a8895abdb77b45d1ed55dPrzemyslaw Szczepaniak public void testNamedGroupBackreference() throws Exception { 64369860bf2b28f0e14741a8895abdb77b45d1ed55dPrzemyslaw Szczepaniak Matcher m = Pattern.compile("(?<somegroup>[a-z]+)X\\k<somegroup>") 64469860bf2b28f0e14741a8895abdb77b45d1ed55dPrzemyslaw Szczepaniak .matcher("foobarXfoobar"); 64569860bf2b28f0e14741a8895abdb77b45d1ed55dPrzemyslaw Szczepaniak 64669860bf2b28f0e14741a8895abdb77b45d1ed55dPrzemyslaw Szczepaniak assertTrue(m.matches()); 64769860bf2b28f0e14741a8895abdb77b45d1ed55dPrzemyslaw Szczepaniak assertEquals("foobar", m.group("somegroup")); 64869860bf2b28f0e14741a8895abdb77b45d1ed55dPrzemyslaw Szczepaniak assertEquals(0, m.start("somegroup")); 64969860bf2b28f0e14741a8895abdb77b45d1ed55dPrzemyslaw Szczepaniak assertEquals(6, m.end("somegroup")); 65069860bf2b28f0e14741a8895abdb77b45d1ed55dPrzemyslaw Szczepaniak 65169860bf2b28f0e14741a8895abdb77b45d1ed55dPrzemyslaw Szczepaniak try { 65269860bf2b28f0e14741a8895abdb77b45d1ed55dPrzemyslaw Szczepaniak Pattern.compile("\\k<nosuchgroup>"); 65369860bf2b28f0e14741a8895abdb77b45d1ed55dPrzemyslaw Szczepaniak fail(); 65469860bf2b28f0e14741a8895abdb77b45d1ed55dPrzemyslaw Szczepaniak } catch(PatternSyntaxException expected) {} 65569860bf2b28f0e14741a8895abdb77b45d1ed55dPrzemyslaw Szczepaniak } 65669860bf2b28f0e14741a8895abdb77b45d1ed55dPrzemyslaw Szczepaniak 65769860bf2b28f0e14741a8895abdb77b45d1ed55dPrzemyslaw Szczepaniak public void testNamedGroupReplace() throws Exception { 65869860bf2b28f0e14741a8895abdb77b45d1ed55dPrzemyslaw Szczepaniak assertEquals("a0123zxx", "0123zxx".replaceAll("(?<numbers>[0-9]+)", "a${numbers}")); 65969860bf2b28f0e14741a8895abdb77b45d1ed55dPrzemyslaw Szczepaniak 66069860bf2b28f0e14741a8895abdb77b45d1ed55dPrzemyslaw Szczepaniak // badly formatted replace string 66169860bf2b28f0e14741a8895abdb77b45d1ed55dPrzemyslaw Szczepaniak try { 66269860bf2b28f0e14741a8895abdb77b45d1ed55dPrzemyslaw Szczepaniak "0123zxx".replaceAll("(?<numbers>[0-9]+)", "a${numbers"); 66369860bf2b28f0e14741a8895abdb77b45d1ed55dPrzemyslaw Szczepaniak fail(); 66469860bf2b28f0e14741a8895abdb77b45d1ed55dPrzemyslaw Szczepaniak } catch(IllegalArgumentException expected) {} 66569860bf2b28f0e14741a8895abdb77b45d1ed55dPrzemyslaw Szczepaniak 66669860bf2b28f0e14741a8895abdb77b45d1ed55dPrzemyslaw Szczepaniak // group that doesn't exist 66769860bf2b28f0e14741a8895abdb77b45d1ed55dPrzemyslaw Szczepaniak try { 66869860bf2b28f0e14741a8895abdb77b45d1ed55dPrzemyslaw Szczepaniak "0123zxx".replaceAll("(?<numbers>[0-9]+)", "a${other}"); 66969860bf2b28f0e14741a8895abdb77b45d1ed55dPrzemyslaw Szczepaniak fail(); 67069860bf2b28f0e14741a8895abdb77b45d1ed55dPrzemyslaw Szczepaniak } catch(IllegalArgumentException expected) {} 67169860bf2b28f0e14741a8895abdb77b45d1ed55dPrzemyslaw Szczepaniak } 67269860bf2b28f0e14741a8895abdb77b45d1ed55dPrzemyslaw Szczepaniak 67314816f17144d90174628ee82dc616d4b9c921149Jesse Wilson} 674