Horst Nogajski: Frage zu RegExp

Hallo zusammen,

ich habe eine kurze Frage zu Regulären-Ausdrücken.

In manchen Beispielen die ich so gefunden habe wird ein Teilausdruck benutzt dessen Sinn ich nicht verstehe, z.B.:

preg_match("/<tagname[^>]*>/i", $html, $matches);

Damit würde man also Tags finden wollen die z.B. <tagName undIrgendWas="blabla" usw> beinhalten.

Aber wofür steht das [^>]

Würde man mit /<tagname.*?>/i nicht genau das gleiche finden?

Viele Grüße,
Horst

  1. Hallo Horst,

    Aber wofür steht das [^>]

    das steht für jedes Zeichen außer einer schließenden spitzen Klammer.

    Würde man mit /<tagname.*?>/i nicht genau das gleiche finden?

    nein, da ein Punkt nicht auf Newlines passt (außer du verwendest zusätzlich noch den Medifier 's' - dann entspricht es der Variante mit dem [^>]).

    Grüße aus Nürnberg
    Tobias

    --
    Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
    1. hi,

      Aber wofür steht das [^>]
      das steht für jedes Zeichen außer einer schließenden spitzen Klammer.

      Würde man mit /<tagname.*?>/i nicht genau das gleiche finden?
      nein, da ein Punkt nicht auf Newlines passt (außer du verwendest zusätzlich noch den Medifier 's' - dann entspricht es der Variante mit dem [^>]).

      ein weiterer, entscheidender grund könnte hier auf die gierigkeit von regulären ausdrücken sein - <tagname.*?> dürfte u.U. über tag-grenzen hinaus auf alles bis zur letzten > des textes greifen (sofern keine entsprechenden modifier benutzt werden).

      gruss,
      wahsaga

      1. Hallo wahsaga,

        ein weiterer, entscheidender grund könnte hier auf die gierigkeit von regulären ausdrücken sein - <tagname.*?> dürfte u.U. über tag-grenzen hinaus auf alles bis zur letzten > des textes greifen

        nein, genau das verhindert ja das Fragezeichen :-) (siehe auch http://dclp-faq.de/q/q-regexp-gierig.html)

        Grüße aus Nürnberg
        Tobias

        --
        Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
        1. Hallo Tobias, Hallo wahsaga,

          ein weiterer, entscheidender grund könnte hier auf die gierigkeit von regulären ausdrücken sein - <tagname.*?> dürfte u.U. über tag-grenzen hinaus auf alles bis zur letzten > des textes greifen
          nein, genau das verhindert ja das Fragezeichen :-) (siehe auch http://dclp-faq.de/q/q-regexp-gierig.html)

          Genau. Ungierig ist es schon, oder nur solange man _nicht_ den Modifier U verwendet, (siehe noch ma http://dclp-faq.de/q/q-regexp-gierig.html)

          Man braucht es also um auch über Newlines hinweg zu treffen, _unabhängig_ von den verwendeten Modifiern.

          Vielen Dank für die Aufklärung ;-)

          Horst