2016-04-16 24 views
1

i url ersetzen möchten zum Beispiel www.google.com oder http://www.google.com mit www.google.com ich habe einen Code für dieseC# Suchen und Ersetzen von URLs aus Zeichenfolge mit Regex

str = Regex.Replace(str, 
       @"((http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?)", 
       "<a target='_blank' href='$1'>$1</a>"); 

es arbeitet mit http://www.google.com aber es funktioniert nicht mit www.google.com oder , die Regex-Code entspricht mit jeder URL-Links. und wenn ich einen langen Link schrieb, wird es das gleiche von der URL zum Beispiel

http://www.google.com/search/asdadad/sdsdsd/sadasdx-sadasd-weqeqwe-zxcxzc.com 

schreiben. Ich möchte es als

<a href="http://www.google.com/search/asdadad/sdsdsd/sadasdx-sadasd-weqeqwe-zxcxzc.com">google.com/asdas... </a>

schreiben, was ist der beste Weg, dies zu machen? Ich bin neu für regex

Antwort

1

Dies auch www.test.com fangen:

(((http|ftp|https):\/\/)?[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&amp;:\/~\+#]*[\w\-\@?^=%&amp;\/~\+#])?) 
↑---------------------↑↑ 

Gerade umgeben das Teil das ist optional und hängen ein Question. Sie es überprüfen können in diesem regex here.


Das erste Spiel aus (Spiele werden definiert mit „(“ und „)“) ist die gesamte URL. So könnte man wie folgt zu ersetzen verwenden:

Regex rgxUrls = new Regex(pattern); 
string result = rgxUrls.Replace(yourText, "<a href=\"$1\"> space for custom text </a>"); 
                 ↑ Inserts first match 

enter image description here

Wo ich verwendet habe, $1 Sie auch $2 - $5 verwenden können. Überprüfen Sie das Bild oben, das zeigt, welche Gruppen welchen Teil der URL erfassen.

Vollständiger Test kannhere gefunden werden.
Klicken Sie einfach ausführen auf der Oberseite.

Ausgang: enter image description here


die Kommentare Laut, wie Gruppen caption funktioniert:

Text: "this is your text to search" 
Pattern: "text to" 

Spiel [0] wird immer Ihr ganzes Spiel text to entspricht. Alle oben genannten Gruppen wie Match[1] oder Match[2] müssen mit "(" und ")" definiert werden.

Text: "this is your text to search" 
Pattern: "text (to)" 
Match[0]: "text to" 
Match[1]: "to" 


Pattern: "text (t(o))" 
Match[0]: "text to" 
Match[1]: "to" 
Match[2]: "o" 

Die Beschriftung mit "()" funktioniert von außen nach innen.

$1 
(((http|ftp|https):\/\/)?[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&amp;:\/~\+#]*[\w\-\@?^=%&amp;\/~\+#])?) 
↑--------------------------------------------------------------------------------------------------↑ 

$2 (http://) 
(((http|ftp|https):\/\/)?[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&amp;:\/~\+#]*[\w\-\@?^=%&amp;\/~\+#])?) 
↑---------------------↑ 

$3 (http) 
(((http|ftp|https):\/\/)?[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&amp;:\/~\+#]*[\w\-\@?^=%&amp;\/~\+#])?) 
    ↑--------------↑ 

$4 (.com) 
(((http|ftp|https):\/\/)?[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&amp;:\/~\+#]*[\w\-\@?^=%&amp;\/~\+#])?) 
           ↑----------↑ 

$5 (/appendedSubdirectory/anotherOne) 
(((http|ftp|https):\/\/)?[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&amp;:\/~\+#]*[\w\-\@?^=%&amp;\/~\+#])?) 
               ↑--------------------------------------------------↑ 

Ich kann hier alles über Regex nicht erklären. Diese Frage scheint für mich gelöst zu sein. Wenn Sie nach Regex tiefere Fragen haben, beginnen Sie eine neue und zeigen Sie etwas Mühe, die Sie vorher getan haben.

+0

danke für deine antwort. aber ich muss lernen, Matchwert zu bearbeiten. $ 1 bekommt volle Adresse. Ich möchte $ 1 bearbeiten zum Beispiel matched_value.Substring (0,5) was ist der richtige Weg? zweite Frage: die URL www.google.com gefunden und durch Ihren Code ersetzt, aber der Link ist ohne http. Wenn ich also auf den Link klicke, wird mydomain.com/www.google.com angezeigt. Wie kann ich einen Link mit http einfügen? –

+0

Sie möchten "www.google.de" durch "http: // www.google.de" ersetzen? Ich werde meine Frage bearbeiten und die Gruppenüberschrift erläutern. – C4u

+0

danke für deine hilfreiche antwort. Ich werde meinen Code mit Ihren Vorschlägen aktualisieren. –

Verwandte Themen