Nur letzter Buchstabe bei preg_match
Mario
- php
0 Mario0 Dennis
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
)
*/
?>
Jetzt hab ichs plötzlich herrausgefunden. ;) ....
Hier der korrekte Code:
preg_match("/<input type="hidden" name="12345" value="(.*)">/", $string, $matches);
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
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.
Hi Dennis,
Und schon ist der Bug gefixed ;-)
preg_match("/<input [...] value=\"(.*)\">/", $string, $matches);
MfG, Dennis.
Hi Mario,
(.)*
Schreib das im RegEx mal so:
(.*)
Alternativ würde ich sowieso empfehlen:
([^"]*)
Oder jedenfalls so in der Art ;-)
MfG, Dennis.
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