-1

原始字符串
由 3 部分组成:

1- 单词(中文)
2- [img]pic url[/img]
3- [url]url[/url]
4-



所以结果如下所示

: [url]http://def[/url]alwaystext[img]http://fgcom/a.gif[/img][img]http://denet/a.png[/img]

我想要
的还是做的3部分,但有一点变化:

1- 单词
2- <img src="pic url" width="300">
3- <a href="url">url</a>


我现在做什么

//content is the source string
string[] contentArray = Regex.Split(content, @"\[img\](.+?)\[/img\]", RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace);
StringBuilder sb= new StringBuilder();
foreach (string item in contentArray)
{
    //if it is a pic url
    if (item.StartsWith("http://", StringComparison.OrdinalIgnoreCase) &
        (item.EndsWith(".jpg", StringComparison.OrdinalIgnoreCase) ||
         item.EndsWith(".gif", StringComparison.OrdinalIgnoreCase) ||
         item.EndsWith(".png", StringComparison.OrdinalIgnoreCase)))
    {
       //convert it into a < img> link
       //append to sb
    }
    else
    {
       string[] contentArray1 = Regex.Split(item, @"\[url\](.+?)\[/url\]", RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace);
       foreach (string tmpItem in ContentArray)
       {
           if (it is a URL)
           {
              //convert it into a < a> link
              //append to sb
           }
           else //must be normal text
           {
                //to make a better layout
                //put into a < p>
                //append to sb
           }
       }
    }
}

问题
上面的代码是有效的,但是,有更好的解决方案吗?使其更有效我的意思是“更好的解决方案”在这里意味着更快的速度@_@

4

1 回答 1

0

一种编码方式是使用 Match.Replace 和 MatchEvaluator 委托。请注意,访问 match.Groups 项时,[url] 和 [img] 有不同的索引,因为它们对应于原始 reg 中的不同组。表达。

    public static string ReplaceTags(Match match)
    {
        if (match.Value.StartsWith("[url]") && match.Groups.Count == 4)
            return String.Format("<a href=\"{0}\">{0}</a>", match.Groups[2]);
        else if (match.Value.StartsWith("[img]") && match.Groups.Count == 4)
            return String.Format("<img src=\"{0}\" width=\"300\">", match.Groups[3]);

        throw new Exception("Unknown match found. Deal with it.");
    }

    static void Main(string[] args)
    {
        string text = "text[url]http://some_url[/url]text2[img]http://some/img.jpg[/img]text3";

        Regex regex = new Regex(@"(\[url](.*)\[/url]|\[img](.*)\[/img])");

        string result = regex.Replace(text, ReplaceTags);

        Console.WriteLine(result);
    }
于 2013-06-05T15:25:56.960 回答