1

簡単な質問: CSSを含む$ css変数があります。その変数で特定のスタイル(私の場合は「body」スタイル)を見つけて、カスタムスタイルに置き換えたいと思います。

基本入出力

/* blablabla */
body {
    background-color:#d0e4fe;
    font-family: 'Afamily', sanas-serif;
}
span {
    padding: 5px
}
h1 {
    color:orange;
    text-align:center;
}
body {
    margin: 10px;
    padding: 5px;
}
p {
    font-family:"Times New Roman";
    font-size:20px;
}

magicFunction()を呼び出します:

echo magicFunction($css, 'font-color: pink; font-weight: bold;');

そして、私たちは得る:

/* blablabla */
body {
    font-color: pink; font-weight: bold;
}
span {
    padding: 5px
}
h1 {
    color:orange;
    text-align:center;
}
p {
    font-family:"Times New Roman";
    font-size:20px;
}

どうしたの ?基本的に私はここで立ち往生しています

$bodyPattern = '/body\s\{[.|\s]*/m';
$found = preg_match_all($bodyPattern, $css, $matches);

次のような出力のものしか見つかりませんでした:

"body {
   '"

行が戻った後...何もありません。

もちろん、正しい正規表現パターンができたら、preg_replaceを使用します。

なぜそれをしたいのか:ウェブサイトのCSSを使用してCssToInlineStyleを適用してニュースレターを作成したいのですが、一部のスタイル(背景色など)が適用されないように、ボディスタイルのみを変更したいと思います。編集:この点はあなたに「理由」を知らせるために言及されており、コメントしてそれについてのあなたの見解を与えることができますが、あなたが答えるべきものとして上記の質問だけを考慮してください。

4

4 に答える 4

1

あなたの後の正規表現はこれだと body {(([a-zA-Z0-9:;#%\(\)\'\-])*\s*)*}思います:-phpで複数行に適切にフォーマットする必要があります。

すべてのスタイルではなくボディ スタイルのみをキャプチャするように、 とを除く すべての文字を一致させる必要があります。{}

また、このサイトを使用して正規表現をテストしてから使用することをお勧めします。私は他のコメントに同意します.あなたのしていることは少し気が狂っていると思います..しかし、ノーマン・ベイツの言葉では、「私たちは皆、時々少し気が狂います」、私は知っています. お役に立てれば。

編集:

<?php
    $css = "body { \n
        color:#899890;\n
        }";
    $pattern = '/body(\s){0,1}{(([a-zA-Z0-9:;#%\(\)\'\-])*\s*)*}/m';
    $found = preg_match_all($pattern, $css, $matches);

    print_r($matches);
?>

生成:

Array
(
    [0] => Array
        (
            [0] => body { 

        color:#899890;

        }
        )

    [1] => Array
        (
            [0] =>  
        )

    [2] => Array
        (
            [0] => 
        )

    [3] => Array
        (
            [0] => ;
        )

)

それは私のために働くようです。

于 2012-09-20T11:55:48.180 に答える
0

私はこのようなcssを使用します。

<style>
<? include style.php;?>
</style>

今style.phpに

body { <? magicFunction('font-color: pink; font-weight: bold;');
?> 
}

h1 {
    color:orange;
    text-align:center;
}
p {
    font-family:"Times New Roman";
    font-size:20px;
}

そしてmagicFunctionはこのようになります

function magicFunction($style) {
    echo $style;
}
于 2012-09-20T11:29:52.317 に答える
0

PHP を使用して CSS ファイルを提供します。または、CSS で変数を使用するためにSASSなどを使用します。

CSS を PHP で解析し、正規表現を使用して変数を置き換えると、パフォーマンスが非常に悪くなり、サーバーに大きな負荷がかかります。

于 2012-09-20T11:05:42.453 に答える
0

これを行う必要を回避する 1 つの方法は、CSS のカスケード機能を利用することです。

body {
    background-color:#d0e4fe;
    font-family: 'Afamily', sanas-serif;
}

<? if (...): ?>
    body {
        // overrides the definitions applied above
        background-color: inherit;
        font-family: inherit;

        // and define your own rules
        font-color: pink; 
        font-weight: bold;
    }
<? endif; ?>
于 2012-09-21T16:34:27.730 に答える