代码之家  ›  专栏  ›  技术社区  ›  DavGarcia

维基链接-将文本[[a]]转换为内部链接

  •  3
  • DavGarcia  · 技术社区  · 16 年前

    我需要实现类似于 wikilinks 在我的网站上。用户正在输入纯文本,只要有内部链接,就会输入[[asdf]]。只有前五个示例真正适用于我需要的实现。

    你会使用正则表达式吗?什么表达式会这样做?有没有一个图书馆已经在C#中实现了这一点?

    3 回复  |  直到 16 年前
        1
  •  2
  •   Community pid    7 年前

    在纯regexp方面,表达式应该是:

    \[\[([^\]\|\r\n]+?)\|([^\]\|\r\n]+?)\]\]([^\] ]\S*)
    \[\[([^\]\|\r\n]+?)\]\]([^\] ]\S*)
    

    通过替换 (.+?) suggested by David ([^\]\|\r\n]+?) ,确保只捕获合法的wiki链接文本,而不关闭方括号或换行符。

    ([^\] ]\S+)

    然而,要使用regexp使这种检测真正充分证明,您应该使用 pushdown automaton 存在于C#regexp引擎中,如 illustrated here.

        2
  •  1
  •   David Z    16 年前

    我不知道是否有现成的库可以做到这一点,但如果是我,我可能只会使用正则表达式:

    • 火柴 \[\[(.+?)\|(.+?)\]\](\S+) 并替换为 <a href="\2">\1\3</a>
    • \[\[(.+?)\]\](\S+) <a href="\1">\1\2</a>

    或者是类似的。

        3
  •  1
  •   Kate    8 年前

    string html = "Some text with a wiki style [[page2.html|link]]";
    html = Regex.Replace(html, @"\[\[([^\]\|\r\n]+?)\|([^\]\|\r\n]+?)\]\]([^\] ]\S*)", @"<a href=""$1"">$2$3</a>");
    html = Regex.Replace(html, @"\[\[([^\]\|\r\n]+?)\]\]([^\] ]\S*)", @"<a href=""$1"">$1$2</a>");
    

    对实际正则表达式的唯一更改是,我认为原始答案中的替换部分是错误的,因此href被设置为显示文本,链接显示在页面上。因此,我交换了它们。