Marga: Regulärer Ausdruck

Hallo,

ist es möglich in einem RegEx anzugeben, dass entweder 0 oder 1 oder nichts (also quasi ein Leerstring) gematcht wird?

MfG
Marga

  1. ist es möglich in einem RegEx anzugeben, dass entweder 0 oder 1 oder nichts (also quasi ein Leerstring) gematcht wird?

    Ja.

    1. Hello out there!

      ist es möglich in einem RegEx anzugeben, dass entweder 0 oder 1 oder nichts (also quasi ein Leerstring) gematcht wird?

      Ja.

      Was denkst du wäre Margas nächste Frage?

      See ya up the road,
      Gunnar

      --
      „Und [dieses Forum] soll […] auch ein Fachforum bleiben und kein Psychologieforum werden.“ (Kirsten Evers)
  2. Hello out there!

    ist es möglich in einem RegEx anzugeben, dass entweder 0 oder 1

    http://de.selfhtml.org/perl/sprache/regexpr.htm#zeichen 2.

    oder nichts (also quasi ein Leerstring) gematcht wird?

    Über die Länge: http://de.selfhtml.org/perl/sprache/regexpr.htm 10. f.

    See ya up the road,
    Gunnar

    --
    „Und [dieses Forum] soll […] auch ein Fachforum bleiben und kein Psychologieforum werden.“ (Kirsten Evers)
  3. Hallo,

    ist es möglich in einem RegEx anzugeben, dass entweder 0 oder 1 oder nichts gematcht wird?

    Ja, und zwar so:

    /[1]?$/

    ^ bezeichnet den Anfang des Strings
    [01] bedeutet eines der Zeichen 0 oder 1
    ? heißt, dass [01] vorkommen kann, aber nicht muss
    $ bezeichnet das Ende des Strings

    => Matcht, wenn der String "0" oder "1" oder "" ist.

    Gruß, Don P


    1. 01 ↩︎

    1. Hi

      /[1]?$/

      ^ bezeichnet den Anfang des Strings
      [01] bedeutet eines der Zeichen 0 oder 1
      ? heißt, dass [01] vorkommen kann, aber nicht muss
      $ bezeichnet das Ende des Strings

      Das hat mir schon mal weitergeholfen. Danke dafür.

      Folgenden RegEx hab ich nun:

      ^([A-Za-z0-9]+);([01]?);([01]?);([01]?);[1]?;([01]);([01]);([01]);([01])

      Der sollte eigentlich auf

      STBK038N;1;1;1;;0;0;0;0;0;0
      STBKNBWXP004;1;1;1;1;1;0;0;0;0;0
      STBKWSWXP020;1;;0;;0;0;0;0;0;0

      matchen, richtig?

      Leider tut es das bei mir nicht.
      Ich benutze Notepad++ dafür, da mir die Quelldaten nur in der CSV-Datei vorliegen.

      MfG
      Marga


      1. 01 ↩︎

      1. Hallo,

        ^([A-Za-z0-9]+);([01]?);([01]?);([01]?);[1]?;([01]);([01]);([01]);([01])

        Der sollte eigentlich auf

        STBK038N;1;1;1;;0;0;0;0;0;0
        STBKNBWXP004;1;1;1;1;1;0;0;0;0;0
        STBKWSWXP020;1;;0;;0;0;0;0;0;0

        matchen, richtig?

        Eigentlich ja. Aber das [1]? sieht etwas seltsam aus. Wenn nur ein einzelnes Zeichen in den eckigen Klammern steht, kann man die gleich weglassen, also einfach 1? schreiben.

        Leider tut es das bei mir nicht.
        Ich benutze Notepad++ dafür, da mir die Quelldaten nur in der CSV-Datei vorliegen.

        Diese Syntax gilt auch für Notepad++. Bist du sicher, dass es nicht matcht?
        Wenn ja: Fangen die fraglichen Zeilen auch wirklich mit "STBK" an?

        Natürlich matcht der RegEx nicht nicht die ganze Zeile, da die [01]? -ähnlichen Patterns nur 8 mal im RegEx vorkommen, aber immer 10 davon vorghanden sind. Übrigens kannst du maximal 9 Klammerungen (...) verwenden, wenn du nachher z.B. mit \1, \2 ersetzen willst. Wenn nicht, lass die runden Klammern weg.

        Gruß, Don P

      2. Hi

        ^([A-Za-z0-9]+);([01]?);([01]?);([01]?);[1]?;([01]);([01]);([01]);([01])

        Der sollte eigentlich auf

        STBK038N;1;1;1;;0;0;0;0;0;0
        STBKNBWXP004;1;1;1;1;1;0;0;0;0;0
        STBKWSWXP020;1;;0;;0;0;0;0;0;0

        matchen, richtig?

        Du hast auch die Möglichkeit nach einer gewissen Anzahl eine Ausdrucks zu Suchen. Somit wird dein Regex übersichtlicher:

        /^([A-Za-z0-9]+)(;[01]?){10}$/

        (Dieses Regex würde übrigens auf alle drei deiner Beispiele matchen, ungeachtet ob der Unterschied in deinem Regex zwischen den Klammern 1-3, 4 und dem Rest beabsichtigt war)

        Das "{10}" bedeutet das der vorangehende Teil "(;[01]?)" 10mal vorkommen muss. Auch Ausdrücke wie {8,10} sind möglich, das würde dann bedeuten der vorangehende Teil muss zwischen 8 und 10mal vorkommen (inkl. 8 und 10).

        gruss

        lightfly

        1. Hello out there!

          Somit wird dein Regex übersichtlicher:
          /^([A-Za-z0-9]+)(;[01]?){10}$/

          Aber anders. An 4. Stelle soll ja nicht '[01]?' sein, sondern '1?'.

          See ya up the road,
          Gunnar

          --
          „Und [dieses Forum] soll […] auch ein Fachforum bleiben und kein Psychologieforum werden.“ (Kirsten Evers)
          1. Hallo Gunnar

            Somit wird dein Regex übersichtlicher:
            /^([A-Za-z0-9]+)(;[01]?){10}$/

            Aber anders. An 4. Stelle soll ja nicht '[01]?' sein, sondern '1?'.

            Darum habe ich darunter geschrieben:

            [..], ungeachtet ob der Unterschied in deinem Regex zwischen den Klammern 1-3, 4 und dem Rest beabsichtigt war)

            Es sollte jediglich ein Beispiel zur Benutzung sein und keine Fertige Lösung.

            gruss

            lightfly

    2. Hello out there!

      ? heißt, dass [01] vorkommen kann, aber nicht muss

      Ach ja, das gibt's ja auch noch (statt '{,1}').
      Wie peinlich.

      See ya up the road,
      Gunnar

      --
      „Und [dieses Forum] soll […] auch ein Fachforum bleiben und kein Psychologieforum werden.“ (Kirsten Evers)
    3. gudn tach!

      /[1]?$/

      ^ bezeichnet den Anfang des Strings
      [01] bedeutet eines der Zeichen 0 oder 1
      ? heißt, dass [01] vorkommen kann, aber nicht muss
      $ bezeichnet das Ende des Strings

      um genau zu sein: nein.

      $ matcht das ende eines strings oder einen zeilenumbruch, dem das stringende folgt. besser ist stattdessen \z.

      also: /[2]?\z/

      prost
      seth


      1. 01 ↩︎

      2. 01 ↩︎

      1. aeh...

        $ matcht das ende eines strings oder einen zeilenumbruch, dem das stringende folgt.

        hmpf, sorry, schlechte formulierung.
        besser: $ matcht das ende eines strings oder auf eine stelle, der ein zeilenumbruch folgt, dem das stringende folgt.

        die essenz, dass \z exakter ist, bleibt aber bestehen.

        prost
        seth