3

正規表現の使用 HTML テキスト内に含まれるファイルまたは画像へのすべてのリンクを抽出したいと考えています。いくつかの例を試してみましたが、多くの理由で失敗しました (私が正規表現に熟練していないことが主な原因です:))

1)最初にこれを試しました:

> Regex("<img[^>]+src=[""']([^""']+)[""']", RegexOptions.Singleline Or
> RegexOptions.IgnoreCase)

(画像ならOK)

2) そして、これ:

Regex("href=[""']([^""']+)[""']", RegexOptions.Singleline Or RegexOptions.IgnoreCase)

1)すべての画像を抽出します。問題なく動作しますが、それは部分的な解決策にすぎません。2) すべての href="asdf" を抽出しますが、ファイルを指す href のみを抽出したいので、アンカー (#middlesection) や .aspx、さらには href="www.google.com/site" のような拡張子のない URL は必要ありません。

特定のテキストからすべてのファイルを抽出する方法を知りたいです。ファイルは、ドットと3文字で終わるリンクです:)

「.aspx」や「.html」、「id_content=99」のような拡張子のない URL、「#anchor123」のようなアンカーには興味がありません。

これを単一の正規表現にパックすることは可能ですか? このすべての背後にある考え方は、HTML で参照されているすべてのファイルをある場所から別の場所にコピーする必要があるということです。したがって、コピーするファイル パスのみを含む ArrayList が必要です。

前もって感謝します!

「野生の」HTMLに関するものではないことを明確にするために、いくつかのサンプルコードを追加しました

このコードを与える:

<p>This is a paragraph</p>
<br>
<a href="#someplace">Go to someplace</a>
<ul>
    <li><p><a href="../files/document.pdf">Important PDF 1</a></p></li>
    <li><p><a href="../files/document.xls">Important XLS</a></p></li>
</ul>
<a href="content.aspx?id_content=55">Go to content 55</a>
<br>
<img src="../images/nicelogo.jpg">

私はこれを取得したい:

"../files/document.pdf"
"../files/document.xls"
"../images/nicelogo.jpg"

私はこれを手に入れたくありません:

"#someplace"
"content.aspx?id_content=55"

それだけです。私が持っている正規表現を使用すると、すべてのリンクを取得できます。ファイルを表すリンクのみが必要です。HTML は私が手作業で書いているので (長い話ですが)、奇妙な二重引用符や不正な形式のタグ、奇妙な文字はありません。

ほぼ完了しているため、実行できることはわかっていますが、「最後に「.something」が「something」である3文字の文字列である一致のみを教えてください」と伝える方法がわかりません。私の言いたいことが分かりますか?:)

4

3 に答える 3

1

例に基づいて、式の大部分は疑問符、フラグメントハッシュ、または二重引用符と一致しないようにする必要があります。

"([^?#"]*)\.[a-z]{3,4}"

最後の部分は、ピリオドが前に付いた3〜4文字の拡張を強制することです。

編集

二重引用符の間の部分をキャプチャするには:

"(([^?#"]*)\.[a-z]{3,4})"

ASPでベース名のメモリキャプチャを回避する方法がわからない場合、PCREでは次を使用します?:

于 2012-10-03T06:17:23.107 に答える
0

あなたは本当に自分でURLを解析しようとは思わないでしょう。リソースが参照される可能性のある形式はすべてあります。src=foo引用符なしで、、、src='foo'他のリソースを参照するスタイルシートを含めることができsrc="foo"ます。エンティティのデコード(src='f&quot;oo')とURLエンコード( )を実行し、相対URLとsrc='f o o'絶対URLを処理する必要がsrc='//somesite.com/blah'あります( ?) 等々。そして、あなたが言及した問題があり、おそらく私が考えていなかった問題があります。StackOverflowには、正規表現を使用してHTMLを解析するのがなぜ悪い考えであるかについて、すでに多くの質問があり、その答えは深刻なものからユーモラスなものまでさまざまです。src='http://somesite.com/blah'src='somesite.com/blah'

代わりに、 wgetのように、すでに問題を解決している既存のツールを使用してみませんか?リンクをたどり、参照されているリソースについてサイトをクロールするには、 wgetの再帰ダウンロードサポートを参照してください。

于 2012-10-02T22:43:19.533 に答える
0

このようなものが動作するはずです:

<a href=\"(.*\.[a-z0-9]{3})\"

しかし、そうであれば、これに正規表現を使用したことを後悔したときに、ここに戻ってコメントすることを約束する必要があります.

于 2012-10-03T03:32:29.653 に答える