これが私ができる必要があることです:
次のタグを一致させる必要があります。
<SPAN style="TEXT-DECORATION: underline">text sample</SPAN>
スパンを html3 準拠のタグに置き換える必要がありますが、間にテキストを入れておいてください。置換後の最終的なタグは次のようになります。
<u>text sample</u>
私は正規表現が苦手で、答えが思いつかないようです。
前もって感謝します。
これが私ができる必要があることです:
次のタグを一致させる必要があります。
<SPAN style="TEXT-DECORATION: underline">text sample</SPAN>
スパンを html3 準拠のタグに置き換える必要がありますが、間にテキストを入れておいてください。置換後の最終的なタグは次のようになります。
<u>text sample</u>
私は正規表現が苦手で、答えが思いつかないようです。
前もって感謝します。
正規表現は、タグ操作用には設計されていません。
なんらかのネスティングが行われていると、面倒になります。
ただし、非常に単純な例を考えると、おそらくこれを行うことができます。
$MyString = preg_replace
( '/(?si)<SPAN\s+style\s*=\s*"TEXT-DECORATION:\s*underline;?"\s*>(.*?)<\/SPAN>/'
, '<u>$1</u>'
, $MyString
);
しかし、これには多くの点で欠陥があり、代わりにタグを操作するために設計されたツールを使用する方がはるかに優れています。
DOMDocument->loadHTML()と関連する関数を見てください。
次のような数行が必要です。
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 を除いて、通常はそうです)、正規表現でこれを行うと非常に複雑になります。ある種のパーサーを使用してオフにします。
あなたが与えた基本的な例について。
<?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」を追加して、大文字と小文字を区別しないようにすることができます。
これは実際には正しい方法ではないことに注意してください。