Avatar billede jakobdo Ekspert
27. september 2004 - 10:04 Der er 7 kommentarer og
1 løsning

Hjælp med at lave min regexp ungreedy.

Jeg har lavet denne regexp:

^[^#]\s*[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\s+.+[^#]

Jeg kører den op mod: HOSTS

Indeholder f.eks.
#      102.54.94.97    rhino.acme.com          # kildeserver
#      38.25.63.10    x.acme.com              # x-klientvært
127.0.0.1      localhost
    127.0.0.2      localhost # hvad så der?
            127.0.0.3      localhost  # test

Jeg ønsker den skal matche:
127.0.0.1      localhost
    127.0.0.2      localhost
            127.0.0.3      localhost
Kan nogen rette den til?
Avatar billede arne_v Ekspert
27. september 2004 - 12:00 #1
Til inspiration:

import java.util.regex.*;

public class HostsRegex {
    public static void find(String s) {
        Pattern p = Pattern.compile("(?:^\\s*)(\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})(?:\\s+)([^#]+)");
        Matcher m = p.matcher(s);
        while (m.find()) {
            System.out.println(m.group(1) + " = " + m.group(2));
        }

    }
    public static void main(String[] args) {
        find("#      102.54.94.97    rhino.acme.com          # kildeserver");
        find("#      38.25.63.10    x.acme.com              # x-klientvært");
        find("127.0.0.1      localhost");
        find("    127.0.0.2      localhost # hvad så der?");
        find("            127.0.0.3      localhost  # test");
    }
}

output:

import java.util.regex.*;

public class HostsRegex {
    public static void find(String s) {
        Pattern p = Pattern.compile("(?:^\\s*)(\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})(?:\\s+)([^#]+)");
        Matcher m = p.matcher(s);
        while (m.find()) {
            System.out.println(m.group(1) + " = " + m.group(2));
        }

    }
    public static void main(String[] args) {
        find("#      102.54.94.97    rhino.acme.com          # kildeserver");
        find("#      38.25.63.10    x.acme.com              # x-klientvært");
        find("127.0.0.1      localhost");
        find("    127.0.0.2      localhost # hvad så der?");
        find("            127.0.0.3      localhost  # test");
    }
}
Avatar billede arne_v Ekspert
27. september 2004 - 12:00 #2
copy paste fejl !

Her kommer output:

127.0.0.1 = localhost
127.0.0.2 = localhost
127.0.0.3 = localhost
Avatar billede jakobdo Ekspert
27. september 2004 - 12:03 #3
Det virker desværre ikke når jeg tester det i RegexBuddy!
Avatar billede arne_v Ekspert
27. september 2004 - 12:11 #4
Hvad sprog skal du bruge det i ?
Avatar billede arne_v Ekspert
27. september 2004 - 12:12 #5
Og tester du linierne seperat som min kode ?
Avatar billede jakobdo Ekspert
27. september 2004 - 12:36 #6
Jeg tester følgende:
(?:^\\s*)(\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})(?:\\s+)([^#]+)
Jeg skal bruge det i Borland Builder 6, og det bygger på regex++.
(hvilket vel igen bygger på pcre)
Avatar billede jakobdo Ekspert
27. september 2004 - 12:58 #7
I mit tilfælde kan jeg bruge denne: ^[^#]\s*[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}?\s+[^#]+

Men smid et svar Arne_V, du bragte mig på sporet! :o)
Avatar billede arne_v Ekspert
27. september 2004 - 13:17 #8
ok
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