0

重複の可能性:
PHP で CSS ファイルを解析する

css ファイルを検索して、クラスまたは ID を見つけ、そのスタイルを元に戻せるようにしたいと考えています。

IE.. css ファイルのレイアウト

body {
margin:0;
padding:0; 
}
span {
margin:0;
padding:0; 
} #input { font:12px arial; }
a { color:#0000FF;
text-decoration:none; 
}
.logout a:hover { text-decoration:underline; }

そして、ファイル内のID「#input」を見つけて、スタイルを元に戻したいと思います。

font:12px arial;

または #input{ font:12px arial; }

そして、もっとある場合は、それを元に戻しますが、これを小さく保つようにします。

私は自分で試してみましたが、正規表現が苦手なのでうまくいきませんでした。

if(file_exists("css/style.css") && filesize("css/style.css") > 0){
$filesize = filesize("css/style.css");
$handle = fopen("css/style.css", "r");
$contents = fread($handle, $filesize);
fclose($handle);
}
preg_match('@^(?:#input{)?([^}]+)@i', $contents, $matches);
echo "style: {$matches[0]} <br>";
print_r($matches2);

助けてください。

4

1 に答える 1

1

特定の正規表現は、いくつかの理由で失敗します。

 @^(?:#input{)?([^}]+)@i
  • ^マーカーは、主題の開始を意味します。CSS セレクターが正規表現の先頭にないため#input {、これは常に失敗します。

  • 次に、 でオプションとしてマークしています(...)?#inputしたがって、正規表現は検索をとにかく無視します。

  • {次に、エスケープもありません。

  • 実際の CSS には、 と の間にスペースが含まれていますが#input{これは正規表現では考慮されません。

より正しいのは次のとおりです。

@(?:#input\s*\{)([^}]+)@i

役立つツールについては、 Open source RegexBuddy alternativesおよびOnline regex testingを参照してください。より良いチュートリアルについては、RegExp.infoも参照してください。

于 2012-11-13T23:35:23.883 に答える