2

私はこの RegEx に過去 1 日ほど取り組んできましたが、必要なデータが返されるようにうまくいったと思います。最初に少し背景を。

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

これが私が思いついた式です:

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

これにより、ドメイン (ドメインがある場合) とパスを分離できます。次に、一致をループします...

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

私の質問はこれです...値に対して「何かを行う」部分です。それを「editorContent」文字列に戻す最良の方法は何ですか? おそらく、editorContent を StringBuilder に入れ、その上で大量の置換を行うことができますが、それは非常に効率的ですか?

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

どんなアイデアも素晴らしいでしょう!

ありがとう!

4

1 に答える 1

3

Regex.Replacea を実行して aを渡したいと思いますMatchEvaluator。基本的にMatchEvaluatorは、置換文字列を返す関数へのデリゲートです。

于 2009-03-05T17:55:17.977 に答える