Regulärer Ausdruck
Uwe
- programmiertechnik
Hallo,
ich habe einen einfachen regulären Ausdruck für die Syntax-Prüfung eines Datums:
([0-9]{2}.){2}[0-9]{4}
Mir ist schon bekannt, daß der auch 00.00.0000 durchläßt, aber das ist nicht das Problem. Ich möchte nur den Ausdruck negieren, d.h. aus z.B. dem String "Party am 25.07.2099" den String "Party am " extrahieren. Anstelle von "Party am " können natürlich beliebige und vor allem beliebig viele Zeichen stehen.
Nur wie funktioniert das?
Vielen Dank für jede Idee!
Gruß,
Uwe
Hallo,
ich habe einen einfachen regulären Ausdruck für die Syntax-Prüfung eines Datums:([0-9]{2}.){2}[0-9]{4}
Mir ist schon bekannt, daß der auch 00.00.0000 durchläßt, aber das ist nicht das Problem. Ich möchte nur den Ausdruck negieren, d.h. aus z.B. dem String "Party am 25.07.2099" den String "Party am " extrahieren. Anstelle von "Party am " können natürlich beliebige und vor allem beliebig viele Zeichen stehen.
Nur wie funktioniert das?
Vielen Dank für jede Idee!
Versuch es mal so .* und deine Regex, dann findet er jedes beliebige Zeichne davor. Aber Achtung auf modifier s!
Gruß
Andi
Versuch es mal so .* und deine Regex, dann findet er jedes beliebige Zeichne davor. Aber Achtung auf modifier s!
Daß ich mit .* beliebige Zeichen bekomme ist schon klar, es geht aber um beliebige Zeichen vor einem Datum. Oder anders ausgedrückt: Alles außer Datum am Schluß.
»» »» Versuch es mal so .* und deine Regex, dann findet er jedes beliebige Zeichne davor. Aber Achtung auf modifier s!
Daß ich mit .* beliebige Zeichen bekomme ist schon klar, es geht aber um beliebige Zeichen vor einem Datum. Oder anders ausgedrückt: Alles außer Datum am Schluß.
Hi dann mach ein $ am Schluß und das Problem dürfte erledigt sein.
Grüße
Andi
»» »» »» Versuch es mal so .* und deine Regex, dann findet er jedes beliebige Zeichne davor. Aber Achtung auf modifier s!
Daß ich mit .* beliebige Zeichen bekomme ist schon klar, es geht aber um beliebige Zeichen vor einem Datum. Oder anders ausgedrückt: Alles außer Datum am Schluß.
Hi dann mach ein $ am Schluß und das Problem dürfte erledigt sein.
Grüße
Andi
Dann hätte ich .*([0-9]{2}.){2}[0-9]{4}$
Das ergibt folgendes:
Party am 25.07.2099
Ich will aber folgendes:
Party am
hi,
([0-9]{2}.){2}[0-9]{4}
Mir ist schon bekannt, daß der auch 00.00.0000 durchläßt, aber das ist nicht das Problem. Ich möchte nur den Ausdruck negieren, d.h. aus z.B. dem String "Party am 25.07.2099" den String "Party am " extrahieren. Anstelle von "Party am " können natürlich beliebige und vor allem beliebig viele Zeichen stehen.
Nur wie funktioniert das?
du könntest ja alles, was als treffer gefunden wurde, durch einen leerstring ersetzen lassen - dann bleibt das übrig, was dein ausdruck _nicht_ gematcht hat ...
gruß,
wahsaga
hi,
([0-9]{2}.){2}[0-9]{4}
Mir ist schon bekannt, daß der auch 00.00.0000 durchläßt, aber das ist nicht das Problem. Ich möchte nur den Ausdruck negieren, d.h. aus z.B. dem String "Party am 25.07.2099" den String "Party am " extrahieren. Anstelle von "Party am " können natürlich beliebige und vor allem beliebig viele Zeichen stehen.
Nur wie funktioniert das?
du könntest ja alles, was als treffer gefunden wurde, durch einen leerstring ersetzen lassen - dann bleibt das übrig, was dein ausdruck _nicht_ gematcht hat ...
gruß,
wahsaga
Das wäre z.B. mal eine passende Idee. Damit funktioniert's.
ich habe einen einfachen regulären Ausdruck für die Syntax-Prüfung eines Datums:
([0-9]{2}.){2}[0-9]{4}
Mir ist schon bekannt, daß der auch 00.00.0000 durchläßt, aber das ist nicht das Problem. Ich möchte nur den Ausdruck negieren, d.h. aus z.B. dem String "Party am 25.07.2099" den String "Party am " extrahieren. Anstelle von "Party am " können natürlich beliebige und vor allem beliebig viele Zeichen stehen.
Du möchtest also foo gefolgt von bar, ohne dass bar Bestandteil des Ergebnisses wird.
Das bekommst du mit einer so genannten positiven Lookahead Assertion, die in Perl-RegEx-Syntax so aussieht: foo(?=bar)
Bezogen auf deine spezielle Aufgabenstellung (und auch gleich etwas eingekürzt) wäre das dann:
.*(?=(\d\d.){2}\d{4})