Sofern du immer <input ... name="..." ... value="..." ... /> und nicht gemischt mit <input ... value="..." ... name="..." ... /> arbeitest kannst Du diesen hier nehmen:
/<input.*?name="(.*?)".*?value="(.*?)".*?>/i
anderfalls häng den anderen Fall eben noch mit dran:
/<input.*?name="(.*?)".*?value="(.*?)".*?>|<input.*?value="(.*?)".*?name="(.*?)".*?>/i
Das Ganze ist nicht case-sensitive!
Wenn Du das durch einen preg_match_all laufen lässt erhälst Du die Treffer als Array:
preg_match_all($regex, $out, PREG_SET_ORDER);
for($i=0; $i<count($out); $i++) {
$name = $out[$i][0];
$value = $out[$i][1];
// Anweisungen...
}
Hoffe es klappt, ist nicht getestet...
Gruss Stefan