如何用超链接替换自定义BBCode样式的标记



我有一堆文本,其中可以包含以下格式的自定义标记:

[MYLINK ID="1234" URL="http://mywebsite.com" TEXT="Website link"]

文本可以包含多个链接。我想做的是将标签转换为普通的html链接,并获取C#代码中的ID。由此产生的替换标签应采用以下格式:

<a href="http://mywebsite.com?id=1234">Website link</a>

因此,为了澄清,如果我有以下大块文本:

This is a test [MYLINK ID="1234" URL="http://mywebsite.com" TEXT="website link"] with some more text and [MYLINK ID="2345" URL="http://mywebsite2.com" TEXT="another link"] here too.

它应该翻译成:

This is a test <a href="http://mywebsite.com?id=1234">website link</a> with some more text and <a href="http://mywebsite2.com?id=2345">another link</a> here too.

编辑:在过去的几个小时里,我一直在与Regex周旋,并设法获得了符合标签的以下内容,但不知道下一步该怎么办。。。

[MYLINK ID="(.*?)" URL="(.*?)" TEXT="(.*?)"]

如有任何帮助,我们将不胜感激。干杯,

如果属性始终按照您显示的顺序,则可以使用

var text = "[MYLINK ID="1234" URL="http://mywebsite.com" TEXT="Website link"]";
var pattern = "\[MYLINK\s+ID="([^"]*)"\s+URL="([^"]*)"\s+TEXT="([^"]*)"]";
var replacement = "<a href="$2?id=$1">$3</a>";
var result = Regex.Replace(text, pattern, replacement, RegexOptions.IgnoreCase);
// => <a href="http://mywebsite.com?id=1234">Website link</a>

请参阅.NET regex演示和C#演示。

详细信息

  • [MYLINK-[MYLINK文本
  • s+-任意一个或多个空白
  • ID="-ID="文本
  • ([^"]*)-组1($1(:除"之外的零个或多个字符
  • "s+URL="-",一个或多个空白,URL="文本
  • ([^"]*)-第2组($2(:除"之外的零个或多个字符
  • "s+TEXT="-",一个或多个空白,TEXT="文本
  • ([^"]*)-第3组($3(:除"之外的零个或多个字符
  • "]-"]文本

谢谢-我确实是在你发帖的时候收到的,做了一些非常类似的事情。。。

string pattern = @"[MYLINK ID=""(.*?)"" URL=""(.*?)"" TEXT=""(.*?)""]";
text = Regex.Replace(text, pattern, x => $"<a href='{x.Groups[2].Value}?id={x.Groups[1].Value}'>{x.Groups[3].Value}</a>");

最新更新