Problem mit Regex

dr00l

Grünschnabel
Hi.

Ich arbeite z.Zt. an einem Parser, der folgenden String auslesen und in lesbar abspeichern soll:

Military Scan on 13:6:5 in tick 209
Ship Base Fleet 1 Fleet2 Fleet3
Phantom 1000 1000 2000 0
Apparition 0 200 0 0
Banshee 0 0 0 1000
Spirit 0 0 500 0
Wraith 0 500 0 0
Shadow 0 0 0 0
Nightmare 0 0 0 0
Ghost 0 0 0 0
Spectre 0 0 0 0
Illusion 0 0 500 0
Vampyre 0 0 0 0
Haunt 0 0 0 0

PHP:
elseif (substr($parser[$n], 0, 16) == 'Military Scan on') {
	
	$type = "12Military Scan";
	$word = explode(" ", $parser[$n]);
	$coords = explode(":", $word[3]);
	$x = $coords[0]; $y = $coords[1]; $z = $coords[2]; $tick = $word[6];
	if ($hide) { $text .= "<table><tr><th colspan='5'>Military Scan on X:X:X in tick $tick</th></tr>"; }
  else { $text .= "<table><tr><th colspan='5'>Military Scan on $x:$y:$z in tick $tick</th></tr>"; }
  
  $text .= "<tr><td>Ship</td><td>Base</td><td>Fleet 1</td><td>Fleet 2</td><td>Fleet 3</td></tr>";
    
  $regex = "^([a-zA-Z]+(\s+[a-zA-Z]+)*)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)^";
  preg_match_all($regex, $parser2, $treffer);

  for($i=0;$i<sizeof($treffer);$i++)
	{
		$name = $treffer[1][$i];
		$base = $treffer[3][$i];
		$f1 = $treffer[4][$i];
		$f2 = $treffer[5][$i];
		$f3 = $treffer[6][$i];
				
		$text .= "<tr><td>$name</td><td>$base</td><td>$f1</td><td>$f2</td><td>$f3</td></tr>";
	}
	$text .= "</table>";
}

Das Problem: Egal wie der String aussieht, preg_match_all findet immer nur 7 Treffer. In diesem Fall ist der letzte Treffer die Zeile welche mit Nightmare startet. Am Pattern dürfte es nicht liegen, da er die 7 Zeilen davor ja findet. Hat jemand eine Idee?

Danke im vorraus.
rampage
 
Zurück