Regular Expressions

Von: , Frage gestellt am Mi, 12. Dez 2007

Hallo,

Vielleicht nicht ganz das richtige Board, aber welche Zeichen matcht dieser Regex:

(ab|ba)*

und dieser

(ab|ba)

Danke & Lg

6 Antworten zu dieser Frage

  1. Antwort von nach 39 Minuten 0 hilfreich
    Re: Regular Expressions

    Hallo! Vielleicht nicht ganz das richtige Board, aber welche Zeichen
    matcht dieser Regex:

    (ab|ba)*
    Zusammensetzungen von "ab" und "ba" in beliebiger Anzahl (also auch 0-mal) und Reihenfolge, greedy. und dieser

    (ab|ba)
    "ab" oder "ba"

    "matcht" im Sinne von Muster passt auf komplette Zeichenkette. Manche konkreten Implementierungen haben match-Funktionen/Methoden, die \A und \Z implizit setzen, andere nicht. Da muss man immer in die Doku gucken.

    Jan

    • Antwort von nach 56 Minuten 0 hilfreich
      Re^2: Regular Expressions

      Hallo Jan, (ab|ba)*
      Zusammensetzungen von "ab" und "ba" in beliebiger Anzahl (also
      auch 0-mal) und Reihenfolge, greedy. und dieser
      (ab|ba)
      "ab" oder "ba"
      "matcht" im Sinne von Muster passt auf komplette Zeichenkette.
      Oops, da warst Du schneller!

      Grüße

      CMБ

  2. Antwort von nach 45 Minuten 0 hilfreich
    Re: Regular Expressions

    Hallo,

    Vielleicht nicht ganz das richtige Board, aber welche Zeichen
    matcht dieser Regex:

    (ab|ba)*
    die Zeichenfolge 'ab' oder 'ba' jeweils 0x oder beliebig oft
    hintereinander, er "matcht" also auch den Text: "Hier iss nix drin".

    Es gibt dann noch die Form: (ab|ba)+

    das " matcht" die Zeichenfolge 'ab' oder 'ba' beliebig oft
    hintereinander, es muß aber *mindestens einmal* auch dastehen. und dieser

    (ab|ba)
    die Zeichenfolge 'ab' oder 'ba' jeweils genau 1x,
    z.B.: "Hier iss ab drin" oder : "Hier iss ba drin".

    Grüße

    CMБ

  3. Antwort von nach 56 Minuten 0 hilfreich
    Re: Regular Expressions

    Hallo F22 Raptor,

    das kommt darauf an, welcher Automat für reguläre Ausdrücke zum Einsatz kommt. Unter UNIX suchst Du mit "(ab|ba)*" nach Zeichenketten wie "ab|ba", "ab|baab|ba", "ab|baab|baab|ba" usw.

    Bei Perl suchst Du damit nach Folgen wie "ababab", "abba" oder "abbaab".

    Bei "(ab|ba)" würdest Du unter UNIX "ab|ba" finden und mit Perl "ab" oder "ba".

    Mehr siehst z.B. hier http://user.cs.tu-berlin.de/~kray/unix/regexp.html

    Gruß
    Volkmar [Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

    • Antwort von nach einer Stunde 0 hilfreich
      Re^2: Regular Expressions

      Hallo! das kommt darauf an, welcher Automat für reguläre Ausdrücke
      zum Einsatz kommt. Unter UNIX suchst Du mit "(ab|ba)*" nach
      Zeichenketten wie "ab|ba", "ab|baab|ba", "ab|baab|baab|ba"
      usw.
      Was meinst Du mit "Unter Unix"? Dort wo "|" kein Sonderzeichen ist, sind es die runden Klammern wohl meist auch nicht (vi, sed, grep). Dann würde "(ab|ba)*" Zeichenketten wie "(ab|ba", "(ab|ba)", "(ab|ba)))))" erkennen.

      Jan

      • Antwort von nach einem Tag 0 hilfreich
        Re^3: Regular Expressions

        Hallo Jan,

        als ich das letzte mal "man 5 regexp" in einem System V UNIX aufgerufen habe, konnte man mit den runden Klammern Gruppierungen definieren, auf die man im Ersetzungskommando mittel \1 bis \9 zurückgreifen kann (z.B. bei grep in der Ursprungsform usw.). egrep hingegen beherrscht auch | als Oder-Verknüpfung, wie perl.

        Deshalb auch mein Hinweis auf den verwendeten Automaten.

        Wenn in einigen Beschreibungen (zu UNIX) \{ und \) als Gruppierungssequenz angeführt werden, liegt das wohl eher daran, das Shell-Sonderzeichen maskiert (escaped) werden müssen, wenn sie nicht in einfachen Anführungszeichen eingeschlossen sind. Versuche doch einfach mal die folgende Kommandosequenz unter UNIX:export testvar=ABCD
        echo $testvar
        echo "$testvar"
        echo '$testvar'
        echo \$testvar
        Du solltest als Ergebnis der echo's erhalten:ABCD
        ABCD
        $testvar
        $testvar
        So wie es sich hier mit dem $-Zeichen als Variablen-Kennzeichen verhält, so verhält es sich auch mit \ ( ) | { } in regexp-Ausdrücken, die nicht in '-Zeichen eingeschlossen sind.

        In "echten" regulären Ausdrücken wird auf diese Maskierungen erst einmal verzichtet.

        Gruß
        Volkmar [Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Keine passende Antwort gefunden? Jetzt eigene Frage stellen!