String Spliiten

Hallo, ich muss euch nochmal stören, sagt mal, ich möchte gerne einen String der sich pro Zeile in einer Textdatei befindet wie diesen hier:
Code:
abc_string "Hallo, das ist ein String"
def_langggggerstring "Ein 2). String wie Toll!"
ghi_kurz "Tolles wetter, in Berlin sind es 34°C !"

so haben:

Code:
array (
  [abc_string] => "Hallo, das ist ein String",
  [def_langggggerstring] => "Ein 2). String wie Toll!",
  [ghi_kurz] => "Tolles wetter, in Berlin sind es 34°C !",
)

ich habe da schon was zusammengebastelt:

PHP:
<?php
  foreach (glob('{esl,aim}{,-}*.cfg', GLOB_BRACE) as $Key => $Value) {
    foreach(explode("\n", file_get_contents($Value)) as $k => $v) {
      list($k, $v) = explode(" ", trim(str_replace("\"", "", $v)));
      $ConfigName = substr($Value, strpos($Value, "/") +1, -4);
      $ShowConfig[$ConfigName][$k] = $v;
    }
  }
?>

Funktioniert soweit auch alles gut, es sei denn in den Anführungszeichen (""):

Code:
abc_string "Hallo, das ist ein String"

sind Leerzeichen, Sonderzeichen etc. Ich habe versucht es mittels RegEx zu gestalten. Leider bin auch ich wie der größtenteils auch, nicht im Stande, die Koordination und Ausdauer mitzubringen, um diesen allein per RegEx zu lösen. Kann mir jemand helfen?
 
PHP:
<?php

$input = <<<EOT
abc_string "Hallo, das ist ein String"
def_langggggerstring "Ein 2). String wie Toll!"
ghi_kurz "Tolles wetter, in Berlin sind es 34°C !"
EOT;
$output = array();

$lines = explode(PHP_EOL, $input);
foreach($lines as $line) {
	$parts = explode(' ', $line);
	$key = $parts[0];
	unset($parts[0]);
	$output[$key] = implode(' ', $parts);
}

var_dump($output);

Das funktioniert nur, wenn im "key" keine leerzeichen sind. Ansonsten musst du echt mit Regex ran.
 
Dann würde ich das am ersten " exploden und dann zusammenbasteln.
Alles vor dem " ist der Key, alles nach dem ersten " ist der Text.
 
Ja schon, aber das kann man nicht so exploden wie du denkst, denn im Stirng selber sind auch Sonderzeichen enthalten wie zb auch ("") Anführungszeichen.
 
Das ist doch vollkommen egal, solange das erste " immer den Stringanfang markiert, suchst du das erste " und hast dann alles was du willst: links key, rechts text, egal wie viele " und Sonderzeichen da sind.
 
Stimmt, mensch gut! Habe ich genauso gelöst danke! Allerdings noch eine Frage: ich hab hier ein brauchbaren RegEx der alles aus einem String filtert das zwischen () Klammern ist. Wie kann man diese so erweitern, das alles was auskommentiert ist zb.:

Code:
abc_string "Hallo, "Wie" gehts dir?! // Hallo" // irgendwas

löschen bzw. ausschneiden?

Code:
"/\(((?>[^()]+)|(?R))*\)/"
 
Zurück