Gunther: preg_match_all und reguläre Ausdrücke

Beitrag lesen

Hallo!

seit zwei Stunden versuche ich mit preg_match_all eine Sache hinzubekommen.

Da ich persönlich Regex wo immer möglich gerne vermeide, habe ich mir deinen Ausgangsstring und das gewünschte Array einmal genauer angeguckt. Dabei fällt auf, dass im Prinzip nur der erste Teil (Fahrzeug-Nr.: 66666.), sowie der letzte (----**Beschreibung des Produktes ABC.**) aus dem ansonsten konsistenten Schema

  • Array-Eintrag fängt nach "\**" an (und geht bis zum nächsten Vorkommen)
  • Schlüssel liegt zwischen "\**" und "**\"
  • Wert ist der Teil nach "**\"

Wann immer man das oder die gleichen Zeichenfolge(n) als Separator(en) findet, kann man die Funktion 'explode' verwenden.

Bleibt also nur die "Sonderbehandlung" des ersten und letzten Teils, die sich hier aber auch nicht als sehr schwierig erweist.

Hier mal mein "Schnellschuss" (extra noch mit allen "Kontrollausgaben" im Quelltext):

  
<?php  
$str = "Fahrzeug-Nr.: 66666.\\**Ausstattungslinie/ -paket:**\\Beschreibung des Paketes 1.\\**Media:**\\Beschreibung des Paketes 2.\\**Komfort:**\\Beschreibung des Paketes 3.\\**Assistenzsysteme:**\\Beschreibung des Paketes 4.\\**Exterieur:**\\Beschreibung des Paketes 5.\\**Interieur:**\\Beschreibung des Paketes 6.\\**Gepäck- / Ladehilfen:**\\Beschreibung des Paketes 7.\\**Sicherheit:**\\Beschreibung des Paketes 8.\\**Abgasreinigung / Umwelt:**\\Beschreibung des Paketes 9.\\**Garantie:**\\Beschreibung des Paketes 10.\\**Sonstiges:**\\Beschreibung des Paketes 11.\\----**Beschreibung des Produktes ABC.**";  
  
$pos_last = strrpos($str, "\\");  
$last_str = substr($str, $pos_last+1);  
//echo"last_str: $last_str<br>\n";  
  
$last_parts = explode("**", $last_str);  
//print_r($last_parts);  
  
$str = substr($str, 0 ,$pos_last);  
//echo"str: $str<br>\n"; exit;  
  
$parts = explode("\\**", $str);  
//print_r($parts);  
  
$fahrzeuge = array();  
$fahrzeuge[$parts[0]] = array();  
$index = array_shift($parts);  
//print_r($parts);  
  
foreach($parts as $val) {  
	//echo"V: $val<br>\n";  
	$temps = explode("**\\", $val);  
	//print_r($temps); echo"<br>\n";  
	$fahrzeuge[$index][$temps[0]] = $temps[1];  
}  
  
$fahrzeuge[$index][$last_parts[0]] = $last_parts[1];  
  
print_r($fahrzeuge);  
?>  

Liefert folgende Ausgabe:

  
Array  
(  
    [Fahrzeug-Nr.: 66666.] => Array  
        (  
            [Ausstattungslinie/ -paket:] => Beschreibung des Paketes 1.  
            [Media:] => Beschreibung des Paketes 2.  
            [Komfort:] => Beschreibung des Paketes 3.  
            [Assistenzsysteme:] => Beschreibung des Paketes 4.  
            [Exterieur:] => Beschreibung des Paketes 5.  
            [Interieur:] => Beschreibung des Paketes 6.  
            [Gepäck- / Ladehilfen:] => Beschreibung des Paketes 7.  
            [Sicherheit:] => Beschreibung des Paketes 8.  
            [Abgasreinigung / Umwelt:] => Beschreibung des Paketes 9.  
            [Garantie:] => Beschreibung des Paketes 10.  
            [Sonstiges:] => Beschreibung des Paketes 11.  
            [----] => Beschreibung des Produktes ABC.  
        )  
  
)  

Und ganz ohne reguläre Ausdrücke ...! ;-)

Gruß Gunther