1

html style="" 属性からいくつかの要素を削除しようとしています。

<div style="color: red; background: #000; position: fixed; top:0; left: 0;">Hey</div>

この HTML を切り取って、位置要素と背景要素を削除したいと考えています。

例:

<div style="color: red; top:0; left: 0;">Hey</div>

どうすれば正規表現でそれを行うことができますか?

4

4 に答える 4

4

単純な正規表現は次のようになります。

/background:.*?;|position:.*?;/

タグの style 属性内のみをチェックしたい場合は、次の PHP テスト コードを試してください。

<?php
$str = '<div style="color: red; background: #000; position: fixed; top:0; left: 0;">Hey</div>';
echo preg_replace('/(<.*?style=.*?)background:.*?;|position:.*?;(.*?")/','$1$2',$str);
?>

また、属性にセミコロンがない場合 (一意の属性、最後の属性) の大文字と小文字を一致させるように求めました。セミコロンがない場合と一致させるには、それが唯一の属性であるか、最後の属性であると想定する必要があります。どちらの場合も、次の正規表現が機能します。

position:[^;]*?("|')
background:[^;]*?("|')

基本的に、キーワードに一致させるか、セミコロン以外の任意の文字が続き、引用符 (シングルまたはダブル) が見つかるまで 0 回以上繰り返すように求めposition:background:ます。

これは、「セミコロンなし」と呼ばれるケースをカバーしています。

次のコードは、すべてのケースで機能するはずです。最適化されておらず、わかりやすく例を示すためだけのものです。これは一連の呼び出しで構成されています。

$str = preg_replace('/(<.*?style.*?)(position:[^;]*?)("|\')/','$1$3',$str);
$str = preg_replace('/(<.*?style.*?)(background:[^;]*?)("|\')/','$1$3',$str);
$str = preg_replace('/(<.*?style.*?)(position:.*?;)(.*?")/','$1$3',$str);
$str = preg_replace('/(<.*?style.*?)(background:.*?;)(.*?")/','$1$3',$str);
echo $str;
于 2012-08-28T13:08:08.327 に答える
1

次のようなことを試してください(ただし、テストされていないため、式が正しいかどうかはよくわかりませんが、残りの問題を解決するのに十分なリードウェイが得られるはずです)

<?php

$pattern = array();
$replacement = array();

$pattern[0] = '/position: [a-zA-Z]+;/';
$pattern[1] = '/background: #[a-zA-Z0-9]+;/';

$replacement[0] = '';
$replacement[1] = '';

$input_html = '<div style="color: red; background: #000; position: fixed; top:0; left: 0;">Hey</div>';

echo preg_replace($pattern, $replacement, $input_html);

?>
于 2012-08-28T13:07:53.473 に答える
0

このようなものが機能するはずです:

$tag = '<div style="color: red; background: #000; position: fixed; top:0; left: 0;">Hey</div>';

$tag = preg_replace('/background:\s?#[0-9a-zA-Z]{3,6};\s?/', '', $tag);

これは背景属性に対してのみであり、次に色属性に対して別のことを行います。

$tag = preg_replace('/position:\s?[a-zA-Z];\s?/', '', $tag);
于 2012-08-28T13:09:28.280 に答える
0

将来的には、Chirpy - Js、Css、DotLess、および T4 ファイルを処理するための VS アドインまたは同様のアプリを使用してみてください。CSS の結合/圧縮をグーグルで検索すると、繰り返されるすべてのセレクターなどが再グループ化されます。

また、リンクされた css ファイルを使用することをお勧めします。そうすれば、クラスをより適切に整理できます。

于 2012-08-28T13:22:46.760 に答える