Louis Armstrong: RegExp: Zahlen in allen möglichen Varianten

Hallo,

ich habe schon lange nichts mehr mit RegEx's gemacht. Nun wurde mir eine kleine Aufgabe zuteil, mit der ich schon überfordert bin.

Gegeben sind folgende Zahlen-Varianten:

1.2
1,2
1,002
0001,01
00.1
1/2
1,003

Mein RegEx, den ich bisher dazu zusammengezimmert habe, ist folgender:

[0-9]{1,4}[,./][0-9]{1,3}
(Delimiter ist = )

Der erkennt nur 1.2 als Treffer. Ich habe schon sehr viel damit experminetiert ([] durch() ersetzt, etc.), aber nichts will klappen.

Ist bestimmt nur ne Kleinigkeit, aber ich komm nicht drauf. Bitte helft mir damit.

Freundliche Grüße
Louis, der Trompeter

  1. Entschuldigung, habe den Post aus Versehen doppelt abgeschickt.

  2. Hallo,

    weiß denn keiner eine Antwort? Oder denkt ihr, das Thema wäre erledigt, nur weil im Thread eine Antwort von mir angelegt wurde?

    Grüße

  3. Hi,

    Gegeben sind folgende Zahlen-Varianten:

    1.2
    1,2
    1,002
    0001,01
    00.1
    1/2
    1,003

    Mein RegEx, den ich bisher dazu zusammengezimmert habe, ist folgender:

    [0-9]{1,4}[,./][0-9]{1,3}
    (Delimiter ist = )

    Der erkennt nur 1.2 als Treffer.

    Nein, der erkennt alle Zahlen, die du oben genannt hast, als solche.
    (Sofern man sie jeweils einzeln für sich prüft.)

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
  4. gruss Louis,

    [0-9]{1,4}[,.\/][0-9]{1,3}
    anstelle von:
    [0-9]{1,4}[,\./][0-9]{1,3}

    der punkt in einer zeichenklasse wird nicht maskiert.
    dafuer gehoert die maskierung an den *slash*.

    so long - peterS. - pseliger@gmx.net

    --
    »Because objects in JavaScript are so flexible, you will want to think differently about class hierarchies.
    Deep hierarchies are inappropriate. Shallow hierarchies are efficient and expressive.« - Douglas Crockford
    ie:( fl:) br:> va:( ls:& fo:) rl:) n3;} n4:} ss:} de:µ js:} mo:? zu:]
    1. Hi!

      [0-9]{1,4}[,./][0-9]{1,3}
      anstelle von:
      [0-9]{1,4}[,./][0-9]{1,3}
      der punkt in einer zeichenklasse wird nicht maskiert.

      Er muss nicht maskiert werden, kann aber (wenn man von PCRE ausgeht).

      dafuer gehoert die maskierung an den *slash*.

      Nein, das muss auch nicht. Er hat ja = als Delimiter.

      Vielleicht ist sein Problem, dass er mehrere Kontexte geschachtelt hat, beispielsweise den Ausdruck in einem PHP-String stehen hat und nun die Maskierungen nicht eindeutig notiert sind.

      Lo!

      1. gruss dedlfix,

        Er muss nicht maskiert werden, kann aber (wenn man von PCRE ausgeht).

        stimmt.

        dafuer gehoert die maskierung an den *slash*.

        Nein, das muss auch nicht. Er hat ja = als Delimiter.

        mein RegExp-tester meckert den ausdruck ohne maskierten
        slash in der zeichenklasse trotzdem an - mmh?

        der gesamte ausdruck, so wie ich ihn vorhin gepostet habe,
        matched nur mit dieser maskierung alle von Louis gegebenen
        beispiele.

        bitte klaert mich auf.

        danke - peterS. - pseliger@gmx.net

        1. Hi!

          dafuer gehoert die maskierung an den *slash*.
          Nein, das muss auch nicht. Er hat ja = als Delimiter.

          mein RegExp-tester meckert den ausdruck ohne maskierten
          slash in der zeichenklasse trotzdem an - mmh?

          Der geht vielleicht davon aus, dass / der Delimiter für den gesamten Ausdruck ist. In dem Fall, muss ein / auch innerhalb einer Zeichenklasse maskiert werden, anderenfalls nicht.

          var_dump(preg_match('/foo[bar/]/', 'foo/'));  
          var_dump(preg_match('/foo[bar\/]/', 'foo/'));  
          var_dump(preg_match('#foo[bar/]#', 'foo/'));
          

          Die erste Zeile ergibt eine Fehlermeldung ("Unknown modifier ']'" und false als Rückgabe), die beiden anderen Zeilen nicht. (Ergebnis ist jeweils 1 (eine Fundstelle)).

          der gesamte ausdruck, so wie ich ihn vorhin gepostet habe, matched nur mit dieser maskierung alle von Louis gegebenen beispiele.

          var_dump(preg_match('=[0-9]{1,4}[,./][0-9]{1,3}=', '...'));

          So passt das auf alle Beispiele.

          Lo!