HTMLソースでは、これらの3つの属性を正確に(それ以上、以下ではなく)FONTタグ内の任意の単純なテキストを任意の順序で抽出する必要があります:size = 5、color = "red"、face = "verdana"。htmlタグ内の属性をチェックするための正規表現
正規表現は、例えば、最後の4文字を除く以下の「randomtext」をすべて抽出する必要があります。
<font size=5 color="red" face="verdana">randomtext</font>
<font size=5 face="verdana" color="red">randomtext</font>
<font color="red" size=5 face="verdana">randomtext</font>
<font color="red" face="verdana" size=5>randomtext</font>
<font face="verdana" size=5 color="red">randomtext</font>
<font face="verdana" color="red" size=5>randomtext</font>
<font size=5 size=5 size=5>randomtext</font>
<font face="verdana" color="red" size=5 foobar="random">randomtext</font>
<font face="verdana" color="red" size=5 foobar="random=pippo">randomtext</font>
<font face="verdana" color="red" size=5 garbagetext>randomtext</font>
私は3ルック先読みを使用することにより、 "任意の順序で" 問題を解決:
<font(?=[^>]* size=5)(?=[^>]* color="red")(?=[^>]* face="verdana")[^>]*>([^<]+)</font>
...以上のhtmlの柔軟性のために:
<\s*font(?=[^>]*\s+size\s*=\s*5)(?=[^>]*\scolor\s*=\s*["']red["'])(?=[^>]*\sface\s*=\s*["']verdana["'])[^>]*>\s*([^<]+?)\s*<\s*/font\s*>
問題があることです最後の3つにも一致します。 これらの一致を除外するにはどうすればよいですか? (明らかに、一般的かつ合理的な短期間で/効率的な方法で、すべての可能な正の組み合わせを使用せずに、私の例でのみ機能するリテラルネガティブ表現を使用せずに)
あなたはどの言語を使用していますか?このタスクは、適切なHTML解析ライブラリで処理するほうがずっと簡単です。 –
Michael、言語に依存しない単一の正規表現で解決する必要があります。正規表現のフレーバーはPCREです。 – Imbuter
この宿題はありますか? – huon