2016-04-09 21 views
2

Gibt es einen nativen "PHP-Weg", um Befehlsargumente aus einer Zeichenfolge zu analysieren? Zum Beispiel mit dem folgenden String:Analysieren Sie eine Zeichenfolge, um Befehlszeilenargumente aus einer Zeichenfolge zu analysieren?

some random string --color=red --is_corvette=true 

Ich möchte folgendes Array erstellen:

array(3) { ['color'] => string(3) "red" ['is_corvette'] => string(4) "true" }

So ein Flag definiert ist als "-" und die Zeichenfolge, nachdem die Flagge der bestimmt, Attribut und sein entsprechender Wert.

Ich weiß, über PHP getopt() Funktion, aber es scheint, dass nur verwendet werden, können Argumente in einem PHP-Skript über die Befehlszeile übergeben zu analysieren, und scheint keine Zeichenfolge auf Nachfrage analysieren zu können

+0

es kann getan werden, indem die Zeichenkette ziemlich einfach zu token – Pooya

+1

Sie können PEARs 'Console_Getopt' Klasse verwenden. Es mag 'getopt', aber akzeptiert String. –

Antwort

0

Sie können einen regulären Ausdruck verwenden, um jedes Vorkommen zu finden, die dann ihr Ergebnis umformatieren genau zu bekommen, was Sie erwarten, wie folgt aus:

$s = 'some random string --color=red --is_corvette=true'; 
preg_match_all(
    '/--((?:color|is_corvette)=[\S]+)/', 
    $s, $matches 
); 
if ($matches AND $matches[1]) { 
    foreach ($matches[1] AS $match) { 
    $match = explode('=', $match); 
    $result[$match[0]] = $match[1]; 
    } 
} 

Neben dem aktuellen Beispiel eine Funktion für eine allgemeinere Verwendung bauen kann, Berücksichtigung eines vordefinierten Satzes möglicher Schlüssel und ihrer Standardwerte:

function args_from_string($string, $set) { 
    preg_match_all(
     '/--((?:' . implode('|', array_keys($set)) . ')=[\S]+)/', 
     $string, $matches 
    ); 
    if ($matches AND $matches[1]) { 
     foreach ($matches[1] AS $match) { 
     $match = explode('=', $match); 
     $set[$match[0]] = $match[1]; 
     } 
    } 
    return $set; 
} 

$predefined_set = [ 
    'color'  => 'black', 
    'is_corvette' => 'false', 
    'other_arg' => 'value', 
    // ... 
]; 
$current_set = args_from_string(
    'some random string --color=red --is_corvette=true', 
    $predefined_set 
); 
Verwandte Themen