Uwe: Regulärer Ausdruck

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

  1. 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

    1. 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ß.

      1. »» »» 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

        1. »» »» »» 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

  2. 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

    --
    "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
    1. 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.

  3. 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})