0

このような繰り返しブロックがたくさんあるファイルがあります

<li>
<span>תמונה מאירוע</span>
<a href="images/gallerys/events/big/109.jpg"
title="תמונה מאירוע"><img
src="images/gallerys/events/thumbnails/109.jpg" alt="cars" />
</a>
</li>

画像のURLと親指のURLのテキストのペアを見つけたい私のパターンは次のとおりです。

href='(.*)'(.*)title(.*)src='(.*?)'

問題は、最初の href から最後の src までのテキストが返されます

4

2 に答える 2

1

あなたの例にはありません'。この場合、title 属性は新しい行にあるため、適切に一致させることはできません。これらはほんの一例にすぎませんが、対処すべきことは他にもたくさんあります。純粋な正規表現で正しく行うことは不可能です。

どの言語を使用しても (おそらく bash/sed/awk... ファミリを除く)、HTML の DOM ツリーへの解析がサポートされ、必要なノードを簡単に見つけることができます。

注: 他の人が指摘したように、問題の 1 つ.*は貪欲であることです。つまり、可能な限り多くの文字を消費します。あなたが本当に頑固なら、貪欲でないバージョン.*?または のような文字セットの一致でこれを解決できます[^"']*

于 2013-02-21T21:24:17.653 に答える
0

Javascriptの実装

var m,
    pairs = [],
    rex = /<li>[\s\S]*?<a href="([^"]+)"[\s\S]+?<img\s+src="([^"]+)"/g,
    str = '<li>\n' +
          '<span>תמונה מאירוע</span>\n' +
          '<a href="images/gallerys/events/big/109.jpg"\n' +
          'title="תמונה מאירוע"><img\n' +
          'src="images/gallerys/events/thumbnails/109.jpg" alt="cars" />\n' +
          '</a>\n' +
          '</li>';

while ( m = rex.exec( str ) ) {
    pairs.push( [ m[1], m[2] ] );
}

console.log( pairs );

URL内に引用符がないと想定します。

適切なHTMLパーサーを使用すると、より信頼性が高くなります。

于 2013-02-21T21:42:02.290 に答える