2017-05-20 5 views
-1

Ich versuche, HTML-Code in BBCode zu konvertieren, und ich fand diese geschickte kleine Klasse mit Regex gepackt, die genau das tut.

public static string ConvertBBCodeToHTML(string str) 
    { 
     Regex exp; 
     // format the bold tags: [b][/b] 
     // becomes: <strong></strong> 
     exp = new Regex(@"[b](.+?)[/b]"); 
     str = exp.Replace(str, "<strong>$1</strong>"); 

     // format the italic tags: [i][/i] 
     // becomes: <em></em> 
     exp = new Regex(@"[i](.+?)[/i]"); 
     str = exp.Replace(str, "<em>$1</em>"); 

     // format the underline tags: [u][/u] 
     // becomes: <u></u> 
     exp = new Regex(@"[u](.+?)[/u]"); 
     str = exp.Replace(str, "<u>$1</u>"); 

     // format the strike tags: [s][/s] 
     // becomes: <strike></strike> 
     exp = new Regex(@"[s](.+?)[/s]"); 
     str = exp.Replace(str, "<strike>$1</strike>"); 

     // format the url tags: [url=www.website.com]my site[/url] 
     // becomes: <a href="www.website.com">my site[/url] 
     exp = new Regex(@"[url=([^]]+)]([^]]+)[/url]"); 
     str = exp.Replace(str, "<a href="$1">$2[/url]"); 

     // format the img tags: 
     // becomes: <img src="www.website.com/img/image.jpeg"> 
     exp = new Regex(@"[img]([^]]+)[/img]"); 
     str = exp.Replace(str, "<img src="$1">"); 

     // format img tags with alt: [img=www.website.com/img/image.jpeg]this is the alt text[/img] 
     // becomes: <img src="www.website.com/img/image.jpeg" alt="this is the alt text"> 
     exp = new Regex(@"[img=([^]]+)]([^]]+)[/img]"); 
     str = exp.Replace(str, "<img src="$1" alt="$2">"); 

     //format the colour tags: [color=red][/color] 
     // becomes: <font color="red"></font> 
     // supports UK English and US English spelling of colour/color 
     exp = new Regex(@"[color=([^]]+)]([^]]+)[/color]"); 
     str = exp.Replace(str, "<font color="$1">$2</font>"); 
     exp = new Regex(@"[colour=([^]]+)]([^]]+)[/colour]"); 
     str = exp.Replace(str, "<font color="$1">$2</font>"); 

     // format the size tags: [size=3][/size] 
     // becomes: <font size="+3"></font> 
     exp = new Regex(@"[size=([^]]+)]([^]]+)[/size]"); 
     str = exp.Replace(str, "<font size=" +$1">$2</font>"); 

     // lastly, replace any new line characters with 

     str = str.Replace("rn", "rn"); 

     return str; 
    } 

Das Problem ist, dass ich die CS1056 Unexpected character '$' Fehler bekommen, wenn die Regex selbst tun ersetzen, wenn es völlig in Ordnung zu sein scheint.

Antwort

0

Sie müssen die eingebettete doppelte Anführungszeichen " in Strings zu entkommen wie:

"<a href="$1">$2[/url]" 

sie sein sollten:

"<a href=\"$1\">$2[/url]" 

Oder mit verbatim string literals:

@"<a href=""$1"">$2[/url]" 
+0

Also richtig! Ich hätte das selbst sehen können ... Jetzt bekomme ich 'System.ArgumentException: 'parsing" [url = ([^]] +)] ([^]] +) [/ url] "- Zu viele). " 'und dieses Mal habe ich versucht zu entkommen – asknomore

0

sollten Sie einzelne verwenden Anführungszeichen zum Einbetten von Werten innerhalb der Zeichenfolge wie folgt:

exp = new Regex(@"[url=([^]]+)]([^]]+)[/url]"); 
str = exp.Replace(str, "<a href='$1'>$2[/url]"); 
+0

vergessen Sie nicht zu markieren beantwortet, wenn das Ihr Problem behebt. –