1

これが私ができる必要があることです:

次のタグを一致させる必要があります。

<SPAN style="TEXT-DECORATION: underline">text sample</SPAN>

スパンを html3 準拠のタグに置き換える必要がありますが、間にテキストを入れておいてください。置換後の最終的なタグは次のようになります。

<u>text sample</u>

私は正規表現が苦手で、答えが思いつかないようです。

前もって感謝します。

4

4 に答える 4

5

正規表現は、タグ操作用には設計されていません。

なんらかのネスティングが行われていると、面倒になります。

ただし、非常に単純な例を考えると、おそらくこれを行うことができます。

$MyString = preg_replace
    ( '/(?si)<SPAN\s+style\s*=\s*"TEXT-DECORATION:\s*underline;?"\s*>(.*?)<\/SPAN>/'
    , '<u>$1</u>'
    , $MyString
    );


しかし、これには多くの点で欠陥があり、代わりにタグを操作するために設計されたツールを使用する方がはるかに優れています。

DOMDocument->loadHTML()関連する関数を見てください。

于 2009-02-24T23:26:19.037 に答える
0

次のような数行が必要です。

preg_replace('|<SPAN style="TEXT-DECORATION: underline">(.+?)</SPAN>|', '<u>$1</u>', $text);
preg_replace('|<SPAN style="FONT-WEIGHT: bold">(.+?)</SPAN>|', '<b>$1</b>', $text);
preg_replace('|<SPAN style="FONT-STYLE: italic">(.+?)</SPAN>|', '<i>$1</i>', $text);

タグがこれらの正規表現と正確に一致しない可能性がある場合 (機械で生成された非常に単純な HTML を除いて、通常はそうです)、正規表現でこれを行うと非常に複雑になります。ある種のパーサーを使用してオフにします。

于 2009-02-24T23:22:41.010 に答える
0

あなたが与えた基本的な例について。

<?php 
$string = '<SPAN style="TEXT-DECORATION: underline">text sample</SPAN>';
$pattern = '/<SPAN style=\"TEXT-DECORATION: underline\">(.+?)<\/SPAN>/';
$replacement = '<u>$1</u>'
echo preg_replace($pattern,$replacement,$string);
?>

トリックを行います。パターンの正規表現は非常に簡単です。これは、SPAN タグの終了までのすべての可能な文字を含めることを示す (.+?) を使用して (引用符と「/」をエスケープして) まさに探しているものです。これは、コードが一貫してフォーマットされていることを前提としています。$pattern の末尾に「i」を追加して、大文字と小文字を区別しないようにすることができます。

これは実際には正しい方法ではないことに注意してください。

于 2009-02-24T23:30:31.413 に答える