25. januar 2010 - 16:43Der er
4 kommentarer og 1 løsning
Regex i Java.
Jeg er igang med et mindre Java projekt der indebærer Regex. Jeg lavede før det projekt i VB.NET, hvor hele mit Regex eksempel så således ud:
r = New Regex("<tag1 eksempel=""Denne value er konstant""(.*?)><tag2(.*?)>(.*?)</tag2></tag1>") mt = r.Match(String) While mt.Success 'Eksempel mt = mt.NextMatch() End While
Så jeg Googlede lidt på det og fandt frem til dette
Pattern p = Pattern.compile("<tag1 eksempel=\"Denne value er konstant\"(.*?)><tag2(.*?)>(.*?)</tag2></tag1>"); Matcher m = p.matcher(s); boolean result = m.find();
while(result){ //eksempel result = m.find(); } ______________________________________________________
Skulle jeg personligt oversætte fra VB.NET til Java ville jeg sige, at disse eksempler er rimelig identiske.
Men deres performance er ikke den samme. VB.NET eksemplet fungerer en hel del bedre!
Jeg vil gerne have mit Java regex til at fungere lige så godt. Har i nogle forslag?
public class REFind { public static void test(String s) { Pattern p = Pattern.compile("<tag1 eksempel=\"Denne value er konstant\"(.*?)><tag2(.*?)>(.*?)</tag2></tag1>"); Matcher m = p.matcher(s); while(m.find()){ System.out.println(m.group()); } } public static void main(String[] args) { test("bla <tag1 eksempel=\"Denne value er konstant\" foo=\"bar\"><tag2 bar=\"foo\">abc</tag2></tag1> bla <tag1 eksempel=\"Denne value er konstant\" foo=\"bar\"><tag2 bar=\"foo\">def</tag2></tag1> bla"); } }
Lukker. Problemet lå ikke i mit regex nej, men i størrelsen af det string jeg skulle matche.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.