Qui è la mia soluzione:
Bisogna alimentare in essa solo l'interno dei tag {}, e si ottiene una matrice che rispetta le quotazioni stringa ecc
A differenza degli altri risposta, si prende cura di "text with quotes"
e accetta entrambi gli spazi, le schede e mescolato per la formattazione.
$a = <<<EOT
commonName "Birthday Cake"
autoTag
category Item
path models/
timedExclusive 1
descSymbol BirthdayCakeDesc
dispSymbol BirthdayCakeDisp
flairCfg "Cake/Idle.aaf mat_BirthdayCake< /scale 1.5 /animation Cake/Idle.aaf 0 looping 0.8 /followDist 3.0 /moveSlew 0.0666 /moveVelThresh 10.0 /animEaseTime 1.0 /zOffRobot 2.7 /rotX 20.0 /zSpinDef bone_spinA 80.0"
//OnInspectOrUnlock Menus previewInit Cake/Idle.aaf BirthdayCake< /scale 1.5 /animation Cake/Idle.aaf 0 looping 0.8 /rotSpeed 30 /pos 3.5 0 1 /scaleMult 1.0
property BirthdaySpirit 10
EOT;
$lines = explode("\n", $a);
$parsed = array();
foreach($lines as $line) {
$chars = str_split($line);
$quoteOpen = false;
$lastField = "";
$lineFields = array();
foreach($chars as $c) {
if($c == '"') {
if($quoteOpen) {
$quoteOpen = false;
$lineFields[] = $lastField;
} else {
$quoteOpen = true;
}
$lastField = "";
continue;
}
if(preg_match("/\\s/", $c) === 0) {
$lastField .= $c;
} else {
if($lastField != "" && !$quoteOpen) {
$lineFields[] = $lastField;
$lastField = "";
} else {
if(!$lastField == "") {
$lastField .= $c;
}
}
}
}
if($lastField != "") {
$lineFields[] = $lastField;
}
$parsed[] = $lineFields;
}
echo '<pre>'; print_r($parsed); echo '</pre>';
uscita:.
Array
(
[0] => Array
(
[0] => commonName
[1] => Birthday Cake
)
[1] => Array
(
[0] => autoTag
)
[2] => Array
(
[0] => category
[1] => Item
)
[3] => Array
(
[0] => path
[1] => models/
)
[4] => Array
(
[0] => timedExclusive
[1] => 1
)
[5] => Array
(
[0] => descSymbol
[1] => BirthdayCakeDesc
)
[6] => Array
(
[0] => dispSymbol
[1] => BirthdayCakeDisp
)
[7] => Array
(
[0] => flairCfg
[1] => Cake/Idle.aaf mat_BirthdayCake< /scale 1.5 /animation Cake/Idle.aaf 0 looping 0.8 /followDist 3.0 /moveSlew 0.0666 /moveVelThresh 10.0 /animEaseTime 1.0 /zOffRobot 2.7 /rotX 20.0 /zSpinDef bone_spinA 80.0
)
[8] => Array
(
[0] => //OnInspectOrUnlock
[1] => Menus
[2] => previewInit
[3] => Cake/Idle.aaf
[4] => BirthdayCake<
[5] => /scale
[6] => 1.5
[7] => /animation
[8] => Cake/Idle.aaf
[9] => 0
[10] => looping
[11] => 0.8
[12] => /rotSpeed
[13] => 30
[14] => /pos
[15] => 3.5
[16] => 0
[17] => 1
[18] => /scaleMult
[19] => 1.0
)
[9] => Array
(
[0] => property
[1] => BirthdaySpirit
[2] => 10
)
)
Si potrebbe provare che esplode nelle schede, non molto efficiente, anche se :( –
sembra che sia separato da tabulazioni/spazi, e le voci sono divise da ritorni a capo Se fosse solo numeri e stringhe senza spazi, sarebbe OK.Il problema sarà le stringhe con le virgolette, un po 'difficile da eguagliare con espressioni regolari .. – MightyPork
perché la gente insiste a creare i propri formati di markup non standard quando esistono già tanti buoni standard ?? varrebbe la pena di sapere da dove proviene, dato che potrebbe esserci un parser perfettamente valido. Sembra molto simile al codice del programma, ma Non riconosco la lingua Sono davvero curioso di sapere da dove lo stai provando - come mai la gente che lo fornisce a te non può dirti di cosa si tratta? – Spudley