Avatar billede thehallas Nybegynder
21. januar 2009 - 07:27 Der er 10 kommentarer og
1 løsning

Java Regex, returnering af matches

Hejsa.

Hvis jeg nu har et string som fx: "?id=123&type=comment", hvilken regex skal jeg så bruge for at få fat i "123" og "comment" har prøvet med noget ala "?id=(.*?)&type=(.*?)", men den giver mig kun "?id=" og "&type=" tilbage.
Avatar billede erikjacobsen Ekspert
21. januar 2009 - 10:25 #1
Der er et andet forslag på http://www.coderanch.com/t/383310/Java-General-intermediate/How-can-I-parse-url
Der skal nok til deres kode til noget url-decoding
Avatar billede thehallas Nybegynder
21. januar 2009 - 11:43 #2
Grunden til at jeg gerne vil matche på denne måde er at den url jeg vil skille af ligger i et stort HTML dokument.
Avatar billede erikjacobsen Ekspert
21. januar 2009 - 13:02 #3
Som udgangspunkt skal det også virke som du skriver det. Måske Java-koden er forkert?
Avatar billede thehallas Nybegynder
21. januar 2009 - 13:11 #4
pattern = Pattern.compile("test=(.*?)");
matcher = pattern.matcher(youtubePage);
while (matcher.find()) {
  System.out.println(String.format("I found the text \"%s\" starting at index %d and ending at index %d.%n",
  matcher.group(), matcher.start(), matcher.end()));
}
Avatar billede erikjacobsen Ekspert
21. januar 2009 - 13:33 #5
Du skal vel bruge matcher.group(0)
Avatar billede thehallas Nybegynder
21. januar 2009 - 14:48 #6
Men så giver den mig "test=" og ikke det som kommer efter "test=".
Avatar billede erikjacobsen Ekspert
21. januar 2009 - 15:20 #7
Ja, jeg kan heller ikke tælle:  Du skal bruge matcher.group(1)  - hvis altså der er noget at matche - når du ikke har noget at slutte på, så matcher den vel med glæde den tomme streng. "test=(.*?)&" bør matche på "noget?test=bingo&osv"
Avatar billede arne_v Ekspert
21. januar 2009 - 15:30 #8
Mit forslag:

package january;

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

public class QueryStringParse {
    private static final Pattern p = Pattern.compile("([A-Za-z][A-Za-z0-9]*)(?:=)([^&]*)");
    public static void parse(String html) {
        Matcher m = p.matcher(html);
        while(m.find()) {
            System.out.println(m.group(1) + "=" + m.group(2));
        }
    }
    public static void main(String[] args) {
        parse("?id=123&type=comment");
    }
}
Avatar billede thehallas Nybegynder
21. januar 2009 - 18:37 #9
Ok. Leger lige med det med når jeg kommer hjem fra arbejde.
Avatar billede thehallas Nybegynder
21. januar 2009 - 20:13 #10
Genialt arne_v. Vil du have point?
Avatar billede arne_v Ekspert
21. januar 2009 - 21:35 #11
gerne

du skal justere [] hvis du vil have andre valide/invalide tegn
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