10647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson/* 20647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson * Copyright (C) 2008 The Android Open Source Project 30647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson * 40647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson * Licensed under the Apache License, Version 2.0 (the "License"); 50647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson * you may not use this file except in compliance with the License. 60647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson * You may obtain a copy of the License at 70647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson * 80647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson * http://www.apache.org/licenses/LICENSE-2.0 90647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson * 100647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson * Unless required by applicable law or agreed to in writing, software 110647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson * distributed under the License is distributed on an "AS IS" BASIS, 120647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson * See the License for the specific language governing permissions and 140647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson * limitations under the License. 150647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson */ 160647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson 170647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilsonpackage libcore.java.util.regex; 180647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson 190647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilsonimport java.util.regex.Matcher; 200647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilsonimport java.util.regex.Pattern; 210647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilsonimport junit.framework.TestCase; 220647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson 230647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilsonpublic final class OldAndroidRegexTest extends TestCase { 240647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson public void testMatches() throws Exception { 250647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson /* Tests class Matcher */ 260647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson 270647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson Pattern p = Pattern.compile("bcd"); 280647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson Matcher m = p.matcher("bcd"); 290647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertTrue("Should match.", m.matches()); 300647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson 310647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson /* Pattern in the middle */ 320647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson p = Pattern.compile("bcd"); 330647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson m = p.matcher("abcdefg"); 340647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertFalse("Should not match.", m.matches()); 350647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson 360647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson /* Pattern at the head */ 370647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson m = p.matcher("bcdefg"); 380647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertFalse("Should not match.", m.matches()); 390647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson 400647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson /* Pattern at the tail */ 410647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson m = p.matcher("abcd"); 420647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertFalse("Should not match.", m.matches()); 430647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson 440647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson /* Make sure matches() doesn't change after calls to find() */ 450647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson p = Pattern.compile(".*"); 460647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson m = p.matcher("abc"); 470647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertTrue(m.matches()); 480647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertTrue(m.find()); 490647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertTrue(m.matches()); 500647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson 510647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson p = Pattern.compile("."); 520647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson m = p.matcher("abc"); 530647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertFalse(m.matches()); 540647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertTrue(m.find()); 550647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertFalse(m.matches()); 560647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson 570647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson /* Make sure matches() agrees after a reset() */ 580647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson m.reset("z"); 590647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertTrue(m.matches()); 600647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson 610647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson m.reset("xyz"); 620647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertFalse(m.matches()); 630647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson 640647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson /* Tests class Pattern */ 650647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson 660647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertFalse("Erroneously matched partial string. " + 670647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson "See http://b/issue?id=754601", Pattern.matches("er", "xer")); 680647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertFalse("Erroneously matched partial string. " + 690647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson "See http://b/issue?id=754601", Pattern.matches("xe", "xer")); 700647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertTrue("Generic regex should match.", 710647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson Pattern.matches(".*", "bcd")); 720647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertTrue("Grouped regex should match.", 730647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson Pattern.matches("(b(c(d)))", "bcd")); 740647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertTrue("Grouped regex should match.", 750647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson Pattern.matches("(b)(c)(d)", "bcd")); 760647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson } 770647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson 780647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson public void testGroupCount() throws Exception { 790647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson Pattern p = Pattern.compile( 800647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson "\\b(?:\\+?1)?" 810647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson + "(?:[ -\\.])?" 820647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson + "\\(?(\\d{3})?\\)?" 830647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson + "(?:[ -\\.\\/])?" 840647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson + "(\\d{3})" 850647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson + "(?:[ -\\.])?" 860647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson + "(\\d{4})\\b" 870647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson ); 880647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson 890647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson Matcher m = p.matcher("1 (919) 555-1212"); 900647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson 910647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertEquals("groupCount is incorrect, see http://b/issue?id=759412", 920647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson 3, m.groupCount()); 930647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson } 940647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson 950647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson public void testGroups() throws Exception { 960647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson Pattern p = Pattern.compile("(b)([c|d])(z*)"); 970647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson Matcher m = p.matcher("abcdefg"); 980647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson 990647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson /* Must call find() first, otherwise group*() are undefined. */ 1000647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertTrue(m.find()); 1010647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson 1020647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertEquals(3, m.groupCount()); 1030647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson 1040647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertEquals("bc", m.group(0)); 1050647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertEquals("b", m.group(1)); 1060647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertEquals("c", m.group(2)); 1070647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertEquals("", m.group(3)); 1080647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson } 1090647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson 1100647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson public void testFind() throws Exception { 1110647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson Pattern p = Pattern.compile("."); 1120647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson Matcher m = p.matcher("abc"); 1130647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson 1140647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertTrue(m.find()); 1150647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertEquals("a", m.group(0)); 1160647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson 1170647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertTrue(m.find()); 1180647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertEquals("b", m.group(0)); 1190647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson 1200647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertTrue(m.find()); 1210647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertEquals("c", m.group(0)); 1220647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson 1230647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertFalse(m.find()); 1240647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson } 1250647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson 1260647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson public void testReplaceAll() throws Exception { 1270647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson // Begins with non-matching text, ends with matching text 1280647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson Pattern p = Pattern.compile("a*b"); 1290647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson Matcher m = p.matcher("fooaabfooaabfooabfoob"); 1300647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson 1310647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson String r = m.replaceAll("-"); 1320647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertEquals("foo-foo-foo-foo-", r); 1330647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson 1340647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson // Begins with matching text, ends with non-matching text 1350647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson p = Pattern.compile("a*b"); 1360647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson m = p.matcher("aabfooaabfooabfoobfoo"); 1370647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson 1380647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson r = m.replaceAll("-"); 1390647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertEquals("-foo-foo-foo-foo", r); 1400647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson } 1410647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson 1420647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson public void testReplaceFirst() throws Exception { 1430647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson // Begins with non-matching text, ends with matching text 1440647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson Pattern p = Pattern.compile("a*b"); 1450647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson Matcher m = p.matcher("fooaabfooaabfooabfoob"); 1460647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson 1470647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson String r = m.replaceFirst("-"); 1480647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertEquals("foo-fooaabfooabfoob", r); 1490647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson 1500647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson // Begins with matching text, ends with non-matching text 1510647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson p = Pattern.compile("a*b"); 1520647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson m = p.matcher("aabfooaabfooabfoobfoo"); 1530647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson 1540647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson r = m.replaceFirst("-"); 1550647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertEquals("-fooaabfooabfoobfoo", r); 1560647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson } 1570647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson 1580647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson public void testSplit() throws Exception { 1590647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson Pattern p = Pattern.compile(":"); 1600647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson String[] strings; 1610647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson 1620647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson strings = p.split("boo:and:foo"); 1630647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertEquals(3, strings.length); 1640647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertEquals("boo", strings[0]); 1650647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertEquals("and", strings[1]); 1660647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertEquals("foo", strings[2]); 1670647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson 1680647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson strings = p.split("boo:and:foo", 2); 1690647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertEquals(2, strings.length); 1700647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertEquals("boo", strings[0]); 1710647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertEquals("and:foo", strings[1]); 1720647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson 1730647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson strings = p.split("boo:and:foo", 5); 1740647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertEquals(3, strings.length); 1750647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertEquals("boo", strings[0]); 1760647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertEquals("and", strings[1]); 1770647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertEquals("foo", strings[2]); 1780647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson 1790647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson strings = p.split("boo:and:foo", -2); 1800647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertEquals(3, strings.length); 1810647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertEquals("boo", strings[0]); 1820647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertEquals("and", strings[1]); 1830647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertEquals("foo", strings[2]); 1840647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson 1850647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson p = Pattern.compile("o"); 1860647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson 1870647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson strings = p.split("boo:and:foo"); 1880647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertEquals(3, strings.length); 1890647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertEquals("b", strings[0]); 1900647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertEquals("", strings[1]); 1910647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertEquals(":and:f", strings[2]); 1920647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson 1930647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson strings = p.split("boo:and:foo", 5); 1940647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertEquals(5, strings.length); 1950647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertEquals("b", strings[0]); 1960647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertEquals("", strings[1]); 1970647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertEquals(":and:f", strings[2]); 1980647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertEquals("", strings[3]); 1990647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertEquals("", strings[4]); 2000647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson 2010647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson strings = p.split("boo:and:foo", -2); 2020647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertEquals(5, strings.length); 2030647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertEquals("b", strings[0]); 2040647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertEquals("", strings[1]); 2050647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertEquals(":and:f", strings[2]); 2060647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertEquals("", strings[3]); 2070647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertEquals("", strings[4]); 2080647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson 2090647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson strings = p.split("boo:and:foo", 0); 2100647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertEquals(3, strings.length); 2110647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertEquals("b", strings[0]); 2120647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertEquals("", strings[1]); 2130647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertEquals(":and:f", strings[2]); 2140647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson } 2150647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson 2160647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson // ------------------------------------------------------------------- 2170647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson // Regression test for #1172774: Bug in Regex.java 2180647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson // Regression test for #1216887: Regular expression match is very slow 2190647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson public static final Pattern TOP_LEVEL_DOMAIN_PATTERN = Pattern.compile( 2200647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson "((aero|arpa|asia|a[cdefgilmnoqrstuwxz])" 2210647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson + "|(biz|b[abdefghijmnorstvwyz])" 2220647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson + "|(cat|com|coop|c[acdfghiklmnoruvxyz])" 2230647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson + "|d[ejkmoz]" 2240647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson + "|(edu|e[cegrstu])" 2250647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson + "|f[ijkmor]" 2260647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson + "|(gov|g[abdefghilmnpqrstuwy])" 2270647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson + "|h[kmnrtu]" 2280647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson + "|(info|int|i[delmnoqrst])" 2290647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson + "|(jobs|j[emop])" 2300647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson + "|k[eghimnrwyz]" 2310647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson + "|l[abcikrstuvy]" 2320647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson + "|(mil|mobi|museum|m[acdghklmnopqrstuvwxyz])" 2330647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson + "|(name|net|n[acefgilopruz])" 2340647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson + "|(org|om)" 2350647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson + "|(pro|p[aefghklmnrstwy])" 2360647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson + "|qa" 2370647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson + "|r[eouw]" 2380647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson + "|s[abcdeghijklmnortuvyz]" 2390647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson + "|(tel|travel|t[cdfghjklmnoprtvwz])" 2400647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson + "|u[agkmsyz]" 2410647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson + "|v[aceginu]" 2420647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson + "|w[fs]" 2430647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson + "|y[etu]" 2440647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson + "|z[amw])"); 2450647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson 2460647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson public static final Pattern EMAIL_ADDRESS_PATTERN = Pattern.compile( 2470647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson "[\\+a-zA-Z0-9\\.\\_\\%\\-]+\\@" 2480647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson + "((" 2490647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson + "[a-zA-Z0-9]\\.|" 2500647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson + "([a-zA-Z0-9][a-zA-Z0-9\\-]*[a-zA-Z0-9]\\.)+)" 2510647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson + TOP_LEVEL_DOMAIN_PATTERN 2520647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson + ")"); 2530647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson 2540647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson public void testMonsterRegexCorrectness() { 2550647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertTrue(EMAIL_ADDRESS_PATTERN.matcher("a+b@gmail.com").matches()); 2560647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson } 2570647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson 2580647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson public void testMonsterRegexPerformance() { 2590647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson long t0 = System.currentTimeMillis(); 2600647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson Matcher m = EMAIL_ADDRESS_PATTERN.matcher("donot repeate@RC8jjjjjjjjjjjjjjj"); 2610647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson assertFalse(m.find()); 2620647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson long t1 = System.currentTimeMillis(); 2630647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson System.out.println("RegEx performance test finished, took " + (t1 - t0) + " ms."); 2640647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson } 2650647bfed6eda99ad77b2dfe8e3696e3fabfaf3ccJesse Wilson} 266