2011-01-09 5 views
0

私は自分自身のphpBB3のために何か作業をしています。私はこれらの笑顔を元の笑顔の状態に戻そうとしています。BBCodeへの画像の正規化の問題

$1 

しかし、私は複数の絵文字を持っているとき、それはちょうど最後のスマイリーを示し、例えば:

/<img src=".*" alt="(.*)" title=".*">/gi 

に置き換え:スマイリーのHTMLが、これが含まれているので

:) :( :O :P 

それはこのようなものだった場合:

alt text http://uimgz.com/i/R2e3H8g5D8.png

それは、この変身:

それはどのスマイリー状態のすべてを交換し、戻っていない理由を、右、上の最後のスマイリーある
:twisted: 

それは次のように返す必要があります:正規表現は罰金だ

:) :o :twisted: 

が、私は問題があると思われるものをない、正規表現の全てはを使用して交換用のループを通過しますループだから問題はありません。

複数のスマイリーのHTML:

<img src="./images/smilies/icon_e_smile.gif" alt=":)" title="Smile" /> <img src="./images/smilies/icon_e_surprised.gif" alt=":o" title="Surprised" /> <img src="./images/smilies/icon_twisted.gif" alt=":twisted:" title="Twisted Evil" /> 
+0

複数のスマイリーがある場合、どのようにhtmlが見えますか? –

+0

投稿を更新しました。 – MacMac

答えて

1

変更し、これに正規表現し、再試行してください:

/<img src="[^"]*" alt="([^"]+)" title="[^"]*">/gi 

を正規表現エンジンは通常、貪欲です。それは何かにマッチする最長のテキストと一致するように試みます。あなたの場合私は1つとして3つのリンクすべてにマッチしました。私はここでやったことは、それが第三SRCにすべての方法と一致しないように」が含まれていないために、src属性内のコンテンツを制限することでした。 それはsrc属性としてこれを扱う非ため./images/smilies/icon_e_smile.gif" alt=":)" title="Smile" /> <img src="./images/smilies/icon_e_surprised.gif" alt=":o" title="Surprised" /> <img src="./images/smilies/icon_twisted.gif

+0

素晴らしい、それはかなり素晴らしいです。 – MacMac

+0

あなたは大歓迎です:)。 @ Marcogのソリューションも機能します。 –

1

使用*?+?貪欲マッチング:

./images/smilies/icon_e_smile.gif" alt=":)" title="Smile" /> <img src="./images/smilies/icon_e_surprised.gif" alt=":o" title="Surprised" /> <img src="./images/smilies/icon_twisted.gif 

まだある:

/<img src=".*?" alt="(.+?)" title=".*?">/gi 

あなたの失敗例では何が起こっては、最初の.*はこのすべてを一致していることです有効なマッチを作りますが、それはあなたが望むものではありません。 ?の後に*/+とすると、正規表現は正常に一致するために必要な最小の文字列を消費します。 「貪欲に注意してください!」のセクションを読んでください。 this articleにあります。

正規表現はHTMLを解析するのに最適なツールではないという一般的な警告も追加したいと思います。 src属性のエスケープ文字が例えば"の場合、私の正規表現は壊れてしまいます。