如何用超链接替换自定义 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>");
我有一堆文本可以包含这种格式的自定义标签:
[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>");