2

だから私はスタイルシートのパーサーを構築しています。私の CSS ファイルでは、次のように解析します。

body {
   background-image: &gradient(#1073b8, &saturate(#1073b8, -20), 40);
}

結果は次のような値になります。

body {
   background-image: url(/cache/graident12345.png);
}

&gradient()これは、キャッチして実行する関数の出力です。しかし、 への引数の 1 つ&gradient()は の結果で&saturate()あるため、階層的であり、preg_replace()内部から外部へと処理する必要がありますが、どうすればよいでしょうか? したがって、最初にキャッチして解析&saturate()し、色の HEX 値を返します。これは、解析時に文字列に含まれます&gradient()。私の現在の検索コードは次のようになります。

if (preg_match("/\&(gradient|saturate)\((.*?)\)/", $value, $m)){
   $arg = explode(", ", $m[2]); # splits argument to the function
   if ($m[1] == "saturate"){
       $value = str_replace($m[0], saturate($arg[1], $arg[2]);
   }
}

また、機能が利用可能になり次第、機能を追加します。または、関数名も正規表現でキャッチします。

私は自分自身を明確にしますか?何か案は?:)

4

1 に答える 1

0

正規表現を再帰関数と組み合わせて使用​​すると、興味深い解析を行うことができます。私はあなたのシナリオでうまくいくものをモックアップしました.あなたのニーズに合わせて自由に微調整してください.

http://ideone.com/66tV0

何が起こっているのか説明が必要な場合はお知らせください。ただし、基本的には、 pattern を正規表現する関数を再帰的に呼び出すことで、再帰的な構造を作成します&functionname([args...])

于 2012-09-18T17:59:35.550 に答える