Mario: Nur letzter Buchstabe bei preg_match

Mein folgendes preg_match will leider nicht so wie ich es will. Ich will doch einfach nur alles herrausholen was als value="" angegeben ist. Leider bekomme ich aber immer nur den letzten Buchstaben zurück.

Wo ist denn hier der Fehler?!

Danke, Mario

<?
$string='html text <input type="hidden" name="12345" value="abcde"> noch mehr html';
preg_match("/<input type="hidden" name="12345" value="(.)*">/", $string, $matches);
print_r($matches);

/*
Array
(
    [0] => <input type="hidden" name="12345" value="abcde">
    [1] => e
)
*/
?>

  1. Jetzt hab ichs plötzlich herrausgefunden. ;) ....

    Hier der korrekte Code:

    preg_match("/<input type="hidden" name="12345" value="(.*)">/", $string, $matches);

    1. Hallo Mario,

      preg_match("/<input [...] value=\"(.*)\">/", $string, $matches);

      richtig, mit (.)* wird beliebig oft ein Zeichen gefunden, wovon aber nur das letzte gespeichert wird - mit (.*) dagegen werden beliebig viele Zeichen gefunden, die aber alle gespeichert werden.

      Grüße aus Nürnberg
      Tobias

      1. Hi Tobias,

        preg_match("/<input [...] value=\"(.*)\">/", $string, $matches);

        Hm, da scheint aber was mit dem Syntax Highlighter noch nicht zu funktionieren:

        Erkennt der irgendwie keine escapten Anführungszeichen?
        Melde das gerade mal als Bug...

        MfG, Dennis.

        --
        Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:( mo:} zu:|
        Sinnvolles Zitieren: Man zitiert nur Teilsätze des Vorposters auf die man sich bezieht! Nicht einfach alles.
        1. Hi Dennis,

          Und schon ist der Bug gefixed ;-)

          preg_match("/<input [...] value=\"(.*)\">/", $string, $matches);

          MfG, Dennis.

          --
          Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:( mo:} zu:|
          Schon gewusst, dass Bugs und Feature Vorschläge für das CForum ins Entwicklerforum oder in den BugTracker gehören und nicht hier her?
  2. Hi Mario,

    (.)*

    Schreib das im RegEx mal so:

    (.*)

    Alternativ würde ich sowieso empfehlen:

    ([^"]*)

    Oder jedenfalls so in der Art ;-)

    MfG, Dennis.

    --
    Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:( mo:} zu:|
    Antworten per E-Mail gibts hier nicht!
    1. Hallo Dennis,

      ([^"]*)

      und wenn man für den ersten Parameter noch einfache Anführungszeichen statt doppelten verwendet, kann man sich auch die Verrenkung mit dem Maskieren der doppelten sparen :-)

      Grüße aus Nürnberg
      Tobias