Avatar billede tetrix Nybegynder
25. januar 2010 - 16:43 Der 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?
Avatar billede arne_v Ekspert
25. januar 2010 - 17:03 #1
Umiddelbart ser det OK ud.

Hvordan har du maalt performance?
Avatar billede tetrix Nybegynder
25. januar 2010 - 17:42 #2
Well, performance var bare et udtryk, men ud fra den samme string var det kun VB.NET det gik godt for.. jeg laver lige nogle ekstra forsøg.
Avatar billede arne_v Ekspert
25. januar 2010 - 17:48 #3
Hvis du kan lave et komplet eksempel med nogle data som giver noget andet du forventer, saa kan vi ogsaa finde ud af hvorfor det ikke virker.
Avatar billede arne_v Ekspert
26. januar 2010 - 04:56 #4
Hvis det er det funktionelle, så er her et eksempel:

package january;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

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");
    }
}
Avatar billede tetrix Nybegynder
03. februar 2010 - 20:05 #5
Lukker. Problemet lå ikke i mit regex nej, men i størrelsen af det string jeg skulle matche.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester