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

How do I replace custom BBCode style tag with a hyperlink

我有一堆文本可以包含这种格式的自定义标签:

[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.

编辑:过去几个小时一直在使用正则表达式,并设法让以下内容与标签相匹配,但不知道下一步该做什么...

\[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=\"?id=\"></a>";
var result = Regex.Replace(text, pattern, replacement, RegexOptions.IgnoreCase);
// => <a href="http://mywebsite.com?id=1234">Website link</a>

参见.NET regex demo and the C# demo

详情:

  • \[MYLINK - [MYLINK 文字
  • \s+ - 任何一个或多个空格
  • ID=\" - ID=" 文字
  • ([^\"]*) - 第 1 组 (</code>):除 <code>"
  • 之外的零个或多个字符
  • \"\s+URL=\" - ",一个或多个空格,URL=" 文本
  • ([^\"]*) - 第 2 组 (</code>):除 <code>"
  • 之外的零个或多个字符
  • \"\s+TEXT=\" - ",一个或多个空格,TEXT=" 文本
  • ([^\"]*) - 第 3 组 (</code>):除 <code>"
  • 之外的零个或多个字符
  • \"] - "] 文本。

谢谢 - 我真的是在你发帖时得到它,做了非常相似的事情......

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>");