Domanda

voglio tagliare tutte le url di come ( http: //. ... ) e sostituirli sulla ancore <a></a> ma la mia richiesta: Non toccare ancore e definizione della pagina (tipo doc) come:

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

Così ho bisogno di trovare il testo semplicemente con l'URL di ...

Sto cercando di ignorare il mio rendere pagina interna e ho fatto BrowserAdapter:

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

appare come questa:

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);
    }
}
È stato utile?

Soluzione

Hai solo bisogno di cercare un po 'avanti e indietro l'url per vedere se è tra virgolette, è improbabile che qualcuno avrebbe incollare un URL citato come testo in chiaro, ma gli URL vengono sempre citati nei tag e doctype. Così il vostro regex diventa:

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

(^ | [^ ' "] +) significa inizio di stringa o un carattere che non è una citazione ([^ ' "] | $) Significa fine della stringa o meno un preventivo

Le parentesi intorno all'area del vecchio regex assicurano che è un gruppo di cattura in modo da poter recuperare l'URL reale con \ 2 (gruppo 2) invece di ottenere la merda in più che avrebbe potuto abbinate sul bordi del URL

A proposito, la tua espressione regolare URL sembra piuttosto male, ci sono forme più compatte e precise. Davvero non c'è bisogno di fuggire TUTTO.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top