3

正規表現は初めてです。画像に境界線がないことを確認しようとしています。したがって、結果は 2 番目の Image になります。正規表現を使用して一致させようとしているテキストは以下のとおりです。

<IMG onerror="this.errored=true;" USEMAP="#Map-43" BORDER="0"/>
<IMG onerror="this.errored=true;" USEMAP="#Map-43" />
<IMG onerror="this.errored=true;" USEMAP="#Map-43" BORDER="0"/>    

次の正規表現を試しましたが、うまくいきませんでした

<IMG\\s[^((>)&(?!BORDER)]*>

それで、誰でもこれについて助けてもらえますか?

4

3 に答える 3

4

HtmlAgilityPackを使用してhtmlを解析できます

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html);

var imgs = doc.DocumentNode.Descendants("img")
    .Where(n => n.Attributes["border"] == null)
    .ToList();

PS:これも参照してください:正規表現は、 XHTML自己完結型タグを除くオープンタグと一致します

于 2012-10-05T07:11:46.807 に答える
2

より良い選択は、そのような問題にhtmlパーサーを使用することです。

ただし、ここでの主な正規表現の問題は、先読みを文字クラスに入れることです。これにより、すべての文字がリテラル文字として扱われます。

<IMG\s(?:(?!BORDER)[^>])*>

うまくいくはずです。Regexrでそれを参照してください

しかし、それはあなたの正規表現の問題を説明するためだけです。プログラミングタスクを解決するには、LB回答を使用してください。

実例:

String html = "<IMG onerror=\"this.errored=true;\" USEMAP=\"#Map-43\" BORDER=\"0\"/><IMG onerror=\"this.errored=true;\" USEMAP=\"#Map-43\" /><IMG onerror=\"this.errored=true;\" USEMAP=\"#Map-43\" BORDER=\"0\"/>";
Console.WriteLine(Regex.Matches(html, @"<IMG\s(?:(?!BORDER)[^>])*>").Cast<Match>().ToList()[0]);
Console.ReadLine();
于 2012-10-05T07:12:26.353 に答える
0

もう 1 つの方法は、jQuery および CSS セレクターを使用してクライアント側で「ボーダー属性なし」の画像を取得することです。

$img = $('img').not('[border]');

リンク:

于 2012-10-05T08:19:38.250 に答える