質問

私のようなすべてのURLのカットしたい(。ます。http:// ... の)をしてアンカーにそれらを交換<a></a>しかし、私の要件: 以下のようなアンカーとページ定義(ドキュメントタイプ)を触れないでください。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

だから私は、URLのとちょうどプレーンテキストを見つける必要がある...

私は自分のページ内にレンダリング上書きしようとしていると私はBrowserAdapterを作っます:

<browser refID="default">
    <controlAdapters>
        <adapter controlType="System.Web.Mvc.ViewPage"
                 adapterType="Facad.Adapters.AnchorAdapter" />
    </controlAdapters>
</browser>

それは次のようになります:

public class AnchorAdapter : PageAdapter
{
    protected override void Render(HtmlTextWriter writer)
    {
        /* Get page output into string */
        var sb = new StringBuilder();
        TextWriter tw = new StringWriter(sb);
        var htw = new HtmlTextWriter(tw);

        // Render into my writer
        base.Render(htw);

        string page = sb.ToString();
        //regular expression 
        Regex regx = new Regex("http://([\\w+?\\.\\w+])+([a-zA-Z0-9\\~\\!\\@\\#\\$\\%\\^\\&amp;\\*\\(\\)_\\-\\=\\+\\\\\\/\\?\\.\\:\\;\\'\\,]*)?", RegexOptions.IgnoreCase); 

        //get the first match 
        Match match = regx.Match(page); 

        //loop through matches 
        while (match.Success)
        {

            //output the match info 
            System.Web.HttpContext.Current.Response.Write("<p>url match: " + match.Groups[0].Value+"</p>");

            //get next match 
            match = match.NextMatch();
        }

        writer.Write(page);
    }
}
役に立ちましたか?

解決

あなたはちょうどそれが引用符でだかどうかを確認するために先にビットを検索し、URLの後ろにする必要があり、それはそう誰かが平文として引用されたURLを貼り付けますですが、URLは常にタグや文書型で引用されています。だからあなたの正規表現になります:

(^|[^'"])(http://([\\w+?\\.\\w+])+([a-zA-Z0-9\\~\\!\\@\\#\\$\\%\\^\\&amp;\\*\\(\\)_\\-\\=\\+\\\\\\/\\?\\.\\:\\;\\'\\,]*)?)([^'"]+|$)

(^ | [^ ' "] +)、文字列の先頭または引用されていない文字を意味し、 ([^ ' "] | $)は、文字列の末尾か引用

を意味し、

古い正規表現の周りの余分な括弧を使用すると、\ 2(グループ2)の代わりに、それがURLのエッジ

にマッチしている場合があります余分ながらくたを取得すると、実際のURLを取得することができますので、それはキャプチャグループの確保します

ところで、あなたのURLの正規表現は、よりコンパクトで正確な形式がありますが、かなり悪い見えます。あなたは本当にすべてをエスケープする必要はありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top