2009-05-18 10 views
1

Ich möchte alle URLs wie schneiden und ersetzen Sie sie auf Anker <a></a> aber meine Anforderung (http://....): nicht Anker und Seitendefinition Berühren Sie (Doc-Typ) wie:Wie schreibe ich richtig Regex für URLs auf der Seite ohne Anker?

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

Also brauche ich nur zu finden Klartext mit URLs ...

ich versuche, meine render innerhalb Seite außer Kraft zu setzen und ich machte BrowserAdapter:

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

es sieht wie folgt aus:

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); 
    } 
} 

Antwort

1

Sie müssen nur vor ein wenig suchen und hinter der URL zu sehen, ob es in Anführungszeichen ist, ist es unwahrscheinlich, jemand zitierte url als Plain-Text, aber URLs werden immer in Tags und doctypes zitiert einfügen würde. So Ihre regex wird:

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

(^ | [^ '"] +) bedeutet Beginn der Zeichenfolge oder ein Zeichen, das kein Zitat ist ([^'"] | $) bedeutet Ende der Schnur oder nicht ein Zitat

die zusätzlichen Klammern um den alten regex sicherzustellen, dass es ist eine Capture-Gruppe, so dass Sie die tatsächliche URL abrufen können mit \ 2 (Gruppe 2) statt den zusätzlichen Mist bekommt es an den Rand der URL angepasst haben könnte

BTW, Ihre URL Regex sieht ziemlich schlecht aus, es gibt kompaktere und genauere Formen. Du musst wirklich ALLES nicht entkommen.

+0

Konnten Sie irgendwelche Proben guten Regex zur Verfügung stellen – omoto

Verwandte Themen