Konditionale Reguläre Ausdrücke mit Subpattern

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Konditionale Reguläre Ausdrücke mit Subpattern

    Ich gehe gerade den Regenechsen RegEx Kurs durch und bin bei Konditionalen Regulären Ausdrücken angekommen.

    Wenn ich als Bedingung ein Subpattern gebe, wird dann nur überprüft, ob dieses gesetzt ist oder auch der Inhalt?

    Folgendes Beispiel:
    Code:
    Name:\s*(.*?)\s+(.*?)(?(1):\s*(\d+))
    Mit dieser Zeichenkette:
    Code:
    Name: Lieschen Mueller
    Lieschen Mueller: 43
    Nun soll der Code eigentlich bewirken, dass es nur dann gefunden wird, wenn beide Namen die Gleichen sind. Doch kann ich den 2. Namen ändern und es wird immer noch erkannt, getestet mit Regex Coach.

    Im Tutorial:
    Regenechsen :: Ideas come true | Optionen, konditionales Regex, Assertion

    Kann es sein, dass das die Antwort ist und somit die Besätigung dafür, dass nur überprüft wird, ob Subpattern vohanden ist?

    Checking for a used subpattern by number If the text between the parentheses consists of a sequence of digits, the condition is true if a capturing subpattern of that number has pre- viously matched.
    Quelle:
    http://www.pcre.org/pcre.txt

    So funktioniert es, aber eine Bestätigung hätte ich trotzdem gerne wegen der obigen Frage:

    Code:
    Name:\s*(.*?)$\s*(?(?=\1)\1:\s*(\d+))
    Zuletzt geändert von einermeiner; 23.04.2011, 10:40.

  • #2
    Hallo,

    die Bedingung wird erfüllt, wenn der referenzierte Teilausdruck schonmal gematcht hat, also egal was darin steht.

    Gruß,

    Amica
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      Zitat von einermeiner Beitrag anzeigen
      Nun soll der Code eigentlich bewirken, dass es nur dann gefunden wird, wenn beide Namen die Gleichen sind.
      Dann willst du dich mit einer Back Reference weiter hinten im Ausdruck auf das beziehen, was ein Subpattern weiter vorn gefunden hat - siehe PHP: Back references - Manual:
      A back reference matches whatever actually matched the capturing subpattern in the current subject string, rather than anything matching the subpattern itself. So the pattern (sens|respons)e and \1ibility matches "sense and sensibility" and "response and responsibility", but not "sense and responsibility".
      I don't believe in rebirth. Actually, I never did in my whole lives.

      Kommentar

      Lädt...
      X