3

HTMLファイルをフィルタリングして、いくつかの属性を削除しようとしています。spans具体的には、色を設定するもの以外はすべて削除したいです。色を設定するスパンでは、style='color...' 以外のすべての属性を削除します。

つまり、私が持っている場合:

<span lang=EN-US>This is a </span>
<span id="myspan" style='color:red;text-align:left;'>test</span>
<span lang=EN-US> to remove spans.</span>

私はそれが欲しい:

This is a
<span style='color:red'>test</span>
to remove spans.

これを行うには、 を使用していpreg_replaceます。私はこれを作成しましたregex

preg_replace(
    '%(<span [^>]*color\:)([a-z]*)(;|\')([^>]*>)(.*)(<\/span>)%s', 
    "<qwerty style='color:$2'>$5</qwerty>", 
$myText);

これを使用した後、 ですべてのスパンを削除してstrip_tagsから、すべて<qwerty>を にし<span>ます。

<span>私の問題は、と</span>( (.*)in my regex)の間のコンテンツが最後まですべてのテキストを取得していることです:

This is a 
<span style='color:red'>test
to remove spans.</span>

最初 の が見つかるまですべてのテキストを取得したいのですが、最後の</span>まですべてのテキストを取得します。これどうやってするの? </span>

ありがとう!

4

1 に答える 1

1

貪欲でない (U) 修飾子を使用します。

preg_replace('%....%sU', .....);
于 2013-07-29T11:04:55.653 に答える