我負責將BB代碼轉換成WIKI表示法和thanx到許多例子,因此我已經破解了大多數更棘手的問題。這是我第一次進入正則表達式,我試圖去學習它(我寧願stringbuilder,但它似乎不適用於BB代碼)。我有4個項目我需要更換,我似乎無法創造適當的模式,以確定:(左原始的字符串,我需要在右雙破折號後)正則表達式模式BBCode到Wiki表示法,C#
的第一項是問題的孩子,因爲wiki引擎在空格處添加一個新行。它不是一個單獨的字段,而是一個更大的字符串的一部分,所以我不能TRIM()它。我目前使用
result = result.Replace("[b]", "*").Replace("[/b]", "*");
img的問題是需要的,如果有可能在給定的格式以某種方式包括的屬性。
爲最後2我難住。我已經使用
Regex r = new Regex(@"<a .*?href=['""](.+?)['""].*?>(.+?)</a>");
foreach (var match in r.Matches(multistring).Cast<Match>().OrderByDescending(m => m.Index))
{
string href = match.Groups[1].Value;
string txt = match.Groups[2].Value;
string wikilink = "[" + txt + "|" + href + "]";
sb.Remove(match.Groups[2].Index, match.Groups[2].Length);
sb.Insert(match.Groups[2].Index, wikilink);
}
在過去的HTML,但似乎無法重構它爲我目前的需求。建議,資源鏈接,所有將不勝感激。
編輯 解決了IMG的問題,雖然不漂亮,我仍然冒險刪除關閉[/ img]標籤可能不早抓。在[IMG]代碼是相當一致的,所以我用:
Regex imgparser = new Regex(@"\[img[^\]]*\]([^\[]*)");
foreach (var itag in imgparser.Matches(multistring).Cast<Match>().OrderByDescending(m => m.Index))
{
string isrc = itag.Groups[1].Value;
string wikipic = itag.ToString().Replace("[img ", "!" + isrc).Replace("width=", "!width=").Replace("height=", ",height=").Replace("]" + isrc, string.Empty);
result = result.Replace(itag.ToString(), wikipic);
}
result = result.Replace("[/img]", "!");
3)['\ [URL =(郵寄地址: [^]] *)]。*?\ [/ url]' - >'[$ 1]'](http://regexstorm.net/tester?p=%5c%5burl%3d(mailto%3a%5b%圖5e%5D%5D *)%5D。*%3F%5C%5B%2furl%5D與I =%5BB%5dRaynor +沙因++%5B%2FB %5D%0D 0A%%5bimg +寬度%3d130 +高度%3D30%5datt6387%5B%2fimg%5D%0D 0A%%5burl%3dmailto%3amc%23example.com%5dmc%40example.com%5B%2furl%5D %0D 0A%%5burl%3dhttp%3A%2F%2fwww.example.com%2F%5dmy +鏈路+文本%5B%2furl%5D&R =%5B%241%5D)。 4)'\ [url =(http [^]] *)](。*?)\ [/ url]' - >'[$ 2 | $ 1]'。 –