2016-09-04 13 views
0

私に助けてください:PHPへのLESS変数の解析

私は変数を持つLESSファイルを持っています。私はPHPには、このファイルを解析し、このような配列を取得する必要があり

/** preloader colors **/ 
@preloader_bg: #0081ff; 
@preloader_color: #fff; 

/** layout **/ 
@body_bg_image_position: ~'left top'; 
@body_bg_image_repeat: ~'no-repeat'; 
@body_bg_image_cover: ~'auto'; 
@body_bg_image: ~''; 

$less_vars = array(
    'preloader_bg' => '#0081ff', 
    'body_bg_image_position' => 'left top' 
); 

は、これは正規表現でまたは任意の他の方法で行うことができますか?

+0

PHP用に優れたSASSパーサーがあるので、SASSに切り替えます。また、LESSとSASSは解析されるだけの言語なので、後方には働かないでください。 – Xorifelse

+0

ありがとうございますが、現時点での問題はSASSではありません – John

+1

これまでに試したことを他人に知らせて、いくつかの研究を行ったり、何かを試みたりした。それ以外の場合、あなたは答えを得ることはほとんどありません。 StackOverflowヘルプセンター[How to ask](http://stackoverflow.com/help/how-to-ask)を参照してください。 – Sherif

答えて

0
あなたはまた、1つの正規表現で行くことができます

^@([^:]+):[~\s]*(['\"]?)([^;]*)\\2;?$ 

PHP(Live demo):

preg_match_all("/^@([^:]+):[~\s]*(['\"]?)([^;]*)\\2;?$/m", $str, $matches); 
var_dump(array_combine($matches[1], $matches[3])); 

出力:

array(6) { 
    ["preloader_bg"]=> 
    string(7) "#0081ff" 
    ["preloader_color"]=> 
    string(4) "#fff" 
    ["body_bg_image_position"]=> 
    string(8) "left top" 
    ["body_bg_image_repeat"]=> 
    string(9) "no-repeat" 
    ["body_bg_image_cover"]=> 
    string(4) "auto" 
    ["body_bg_image"]=> 
    string(0) "" 
} 
+0

あなたはプロです!どうもありがとうございます! – John

1

入力行を1行ずつ繰り返し、次に行を:に分割することができます。これは、いくつかのクリーンアップの後、あなたにキーとその値を与える必要があります。

See the ideone

$input = " 
/** preloader colors **/ 
@preloader_bg: #0081ff; 
@preloader_color: #fff; 

/** layout **/ 
@body_bg_image_position: ~'left top'; 
@body_bg_image_repeat: ~'no-repeat'; 
@body_bg_image_cover: ~'auto'; 
@body_bg_image: ~''; 
"; 

// create an array to store the values 
$cssVar = []; 

// iterate over the lines 
foreach (split("\n", $input) as $ln) { 
    // ignore lines that don't start with @ as they are not variables 
    if ($ln[0] != "@") { 
     continue; 
    } 
    // get the key and value for the css variable 
    // TODO: cleanup ~ mark 
    $bits = explode(":", $ln); 
    $key = substr(trim($bits[0]), 1); 
    $value = trim($bits[1]); 

    // store the value 
    $cssVar[$key] = $value; 
} 

var_export($cssVar); 
+0

これは私が今考えていたことです、ありがとう! – John