2009-03-05 12 views
2

私はこのRegExを過去1日ほど使っています。私はそれがうまくいっていると思っています。最初は少し背景。Regex.Matches MatchCollectionに基づいて文字列にコンテンツを置き換えます。

私はユーザーがウェブページを編集できるコンテンツエディタを持っています。彼らは、テキストの書式設定、リンクの追加などを行うことができます。彼らが保存をクリックすると、エディタはコンテンツ(editor.Content)を取得して文字列に入れる機能を提供します。私がしたいことは、リンク(<a>タグ)を取得し、それらが内部リンクか外部リンクか、そしてそれらがPDFファイルであるかどうかを調べることです。ここで

は私が作ってみた表現である:私は、ドメインを分離することができるよ、これにより

<a\b[^<>]*href\s*=\s*[\""\'](?<domain>https?:\/\/[^\/\s\'\""]*)*\/?(?<path>\/?[^\s\""]+?)?[[>\""\'] 

とパスアウト(それは1を持っている場合)。

dim matchColl as MatchCollection = Regex.Matches(editorContent, regExString) 
For Each m as Match in matchColl 
    If m.Groups("domain").value <> myInternalDomain and m.Groups("domain").value <> "" then 
     'this is an external domain... do some stuff 
    End If 
    If m.Groups("path").value.EndsWith(".pdf") then 
     'it is a pdf, do some other stuff... 
    End if 
Next 

私の質問はこれです...私は値に「いくつかのものを行う」パーツその後、試合を通してIループ...、何がその戻って私 "に取得するための最良の方法だろうeditorContent 'string?私はおそらく、StringBuilderにeditorContentを置き換えて、その上に置き換えの束を行うことができますが、それは非常に効率的ですか?

たとえば、PDFでは、新しいウィンドウ(target = "_ blank")で開くように指定し、外部URLに対してはjavascriptコードをonclick属性に追加します。

いずれかのアイデアが素晴らしいでしょう!

ありがとうございます!

+1

... [これは正規表現と一致しています。](http://stackoverflow.com/a/1732454/5458362)... – Riker

答えて

3

あなたはRegex.ReplaceをしてMatchEvaluatorを渡したいと思うと思います。基本的にMatchEvaluatorは、置換文字列を返す関数の代理人です。

+0

これは完璧に機能しました!私は、RegExの力がどれほど強力であるか、私の心を揺さぶる...これは素晴らしいことだ! – hacker

関連する問題