2016-04-09 19 views
2

文字列のコマンド引数を解析するネイティブの "PHPの方法"はありますか?フラグが決定した後、文字列 - 「」だからフラグは次のように定義され文字列を解析して文字列のコマンドライン引数を解析しますか?

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

:私は次の配列を作成したい

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

:たとえば、次の文字列を与えられました属性とそれに対応する値。

私はPHPのgetopt()関数について知っていますが、コマンドラインでPHPスクリプトに渡された引数を解析するためにしか使えないようで、要求に応じて文字列を解析することはできません。

+0

文字列をかなり簡単にトークン化することでできます – Pooya

+1

PEARの 'Console_Getopt'クラスを使うことができます。それは 'getopt'のようですが、文字列を受け入れます。 –

答えて

0

あなたはこのように、あなたが期待している正確に何を得るために、その結​​果を再フォーマットし、各出現を見つけるために正規表現を使用することができます、現在の例を越えて

$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]; 
    } 
} 

あなたはより多くの一般的な使用のための機能を構築することができます事前定義された可能なキーのセットとそれらのデフォルト値を考慮に入れてください:

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 
);