0

ここで正規表現マスターが必要です!

<img src="\img.gif" style="float:left; border:0" />
<img src="\img.gif" style="border:0; float:right" />

上記の HTML を考えると、"float:right" または "float:left" に一致する正規表現パターンが必要ですが、img タグのみです。

前もって感謝します!

4

3 に答える 3

4
/<img\s[^>]*style\s*=\s*"[^"]*\bfloat\s*:\s*(left|right)[^"]*"/i

ただし、アドバイスする必要があります。私の経験では、どの正規表現を記述しても、誰かがそれを壊す有効な HTML を考え出すことができます。一般的で信頼できる方法で本当にこれを行いたい場合は、正規表現をスローするのではなく、HTML を解析する必要があります。

于 2009-08-31T21:34:45.230 に答える
2

正規表現を使用して html や xml を解析するべきではありません。すべてのコーナー ケースを処理する絶対確実な正規表現を設計することは不可能です。代わりに、選択した言語の html 解析ライブラリを見つけることをお勧めします。

とはいえ、正規表現を使用した解決策は次のとおりです。

<img\s[^>]*?style\s*=\s*".*?(?<"|;)(float:.*?)(?=;|").*?"

「float:」は、そこにある唯一のキャプチャ グループ (番号 1 である必要があります) でキャプチャされます。

正規表現は基本的に img タグの開始に一致し、その後に何度も閉じ括弧ではない任意のタイプの文字が続き、その後に style 属性が続きます。スタイル属性の値内で、float: は属性内の任意の場所に配置できますが、実際の float スタイルとのみ一致する必要があります (つまり、属性の開始またはセミコロンが前にあり、セミコロンまたは属性の終了が続きます)。 .

于 2009-08-31T21:39:03.053 に答える
0

私はSean Nymanに同意します。正規表現を使用しないことが最善です(少なくとも永続的なものではありません)。アドホックでもう少し耐久性のあるものについては、次のことを試してください。

/<img\s(?:\s*\w+\s*=\s*(?:'[^']*'|"[^"]*"))*?\s*\bstyle\s*=\s*(?:"[^"]*?\bfloat\s*:\s*(\w+)|'[^']*?float\s*:\s*(\w+)/i
于 2009-08-31T21:46:12.773 に答える