4

C#:ハイパーリンクとその説明を解析するのに適した正規表現は何ですか?

大文字と小文字を区別しない、空白、およびHREFタグの前後に(二重引用符ではなく)一重引用符を使用することを検討してください。

および<a>などのタグ内に他のタグがあるハイパーリンクの取得も検討してください。<b><i>

4

6 に答える 6

5

ネストされたタグがない(そして改行がない)限り、次のバリアントが適切に機能します。

<a\s+href=(?:"([^"]+)"|'([^']+)').*?>(.*?)</a>

ネストされたタグが機能するようになるとすぐに、正規表現は解析に適していません。ただし、最新のインタープリターのより高度な機能を適用することで、それらを引き続き使用できます(正規表現マシンによって異なります)。たとえば、.NET正規表現はスタックを使用します。私はこれを見つけました:

(?:<a.*?href=[""'](?<url>.*?)[""'].*?>)(?<name>(?><a[^<]*>(?<DEPTH>)|</a>(?<-DEPTH>)|.)+)(?(DEPTH)(?!))(?:</a>) 

ソース:http ://weblogs.asp.net/scottcate/archive/2004/12/13/281955.aspx

于 2008-08-25T16:21:47.833 に答える
3

StackOverflowからのこの例を参照してください: Web ページからのリンクを解析するための正規表現?

HTML Agility Packを使用すると、壊れた正規表現ではなく、HTML のセマンティクスを使用して、html を解析し、詳細を抽出できます。

于 2008-09-19T09:11:17.347 に答える
1

私はこれを見つけましたが、どうやらこれらの人はそれにいくつかの問題を抱えていました。

編集:(動作します!)
私は今、自分でテストを行って動作することを発見しました。C#がわからないので、C#の答えを出すことはできませんが、PHPは知っています。これが、取得した一致配列です。これで実行します:

<a href="pages/index.php" title="the title">Text</a>

array(3) { [0]=> string(52) "Text" [1]=> string(15) "pages/index.php" [2]=> string(4) "Text" } 
于 2008-08-25T16:09:11.780 に答える
1

私はほとんどの場合を処理する正規表現を持っていますが、それは複数行コメント内のHTMLと一致すると思います。

.NET構文を使用して記述されていますが、簡単に翻訳できる必要があります。

于 2008-08-25T16:26:44.343 に答える
0

私がそれを機能させたので、このスニペットをそこに投げるつもりです..これは以前に提案されたもののそれほど貪欲でないバージョンです。入力に複数のハイパーリンクがある場合、元の機能は機能しません。以下のこのコードを使用すると、すべてのハイパーリンクをループできます。

static Regex rHref = new Regex(@"<a.*?href=[""'](?<url>[^""^']+[.]*?)[""'].*?>(?<keywords>[^<]+[.]*?)</a>", RegexOptions.IgnoreCase | RegexOptions.Compiled);
public void ParseHyperlinks(string html)
{
   MatchCollection mcHref = rHref.Matches(html);

   foreach (Match m in mcHref)
      AddKeywordLink(m.Groups["keywords"].Value, m.Groups["url"].Value);
}
于 2009-11-12T06:08:13.537 に答える
0

以下は、balanced タグに一致する正規表現です。

(?:""'[""'].*?>)(?(?>(?)|(?<-DEPTH>)|.)+)(?(DEPTH)(?!))(?: )

于 2009-11-29T15:37:25.500 に答える