【问题标题】:Regular expression to convert mark down to HTML将 Markdown 转换为 HTML 的正则表达式
【发布时间】:2010-09-11 18:20:28
【问题描述】:

您将如何编写正则表达式将标记转换为 HTML?例如,您可以输入以下内容:

This would be *italicized* text and this would be **bold** text

然后需要将其转换为:

This would be <em>italicized</em> text and this would be <strong>bold</strong> text

与stackoverflow使用的mark down编辑控件非常相似。

澄清

不管怎样,我使用的是 C#。此外,这些是我想要允许的 only 真实标签/降价。正在转换的文本量将少于 300 个字符左右。

【问题讨论】:

    标签: c# html regex markdown


    【解决方案1】:

    最好的方法是找到移植到您使用的任何语言的 Markdown 库版本(您没有在问题中指定)。


    既然您已经澄清您只希望处理 STRONG 和 EM,并且您正在使用 C#,我建议您查看 Markdown.NET 以了解这些标签是如何实现的。如您所见,它实际上是两个表达式。代码如下:

    private string DoItalicsAndBold (string text)
    {
        // <strong> must go first:
        text = Regex.Replace (text, @"(\*\*|__) (?=\S) (.+?[*_]*) (?<=\S) \1", 
                              new MatchEvaluator (BoldEvaluator),
                              RegexOptions.IgnorePatternWhitespace | RegexOptions.Singleline);
    
        // Then <em>:
        text = Regex.Replace (text, @"(\*|_) (?=\S) (.+?) (?<=\S) \1",
                              new MatchEvaluator (ItalicsEvaluator),
                              RegexOptions.IgnorePatternWhitespace | RegexOptions.Singleline);
        return text;
    }
    
    private string ItalicsEvaluator (Match match)
    {
        return string.Format ("<em>{0}</em>", match.Groups[2].Value);
    }
    
    private string BoldEvaluator (Match match)
    {
        return string.Format ("<strong>{0}</strong>", match.Groups[2].Value);
    }
    

    【讨论】:

    【解决方案2】:

    单个正则表达式是行不通的。每个文本标记都有自己的 html 翻译器。更好地了解现有转换器是如何实现的,以了解其工作原理。

    http://en.wikipedia.org/wiki/Markdown#See_also

    【讨论】:

    【解决方案3】:

    我不具体了解 C#,但在 perl 中会是:

    \\\*\\\*(.*?)\\\*\\\*/
    \< bold\>$1\<\/bold\>/g
    
    \\\*(.\*?)\\\*/
    \< em\>$1\<\/em\>/g
    

    【讨论】:

      【解决方案4】:

      我遇到了以下post,建议不要这样做。就我而言,虽然我希望保持简单,但我想我会根据jop's 的建议发布此内容,以防其他人想要这样做。

      【讨论】:

        猜你喜欢
        • 2022-10-04
        • 1970-01-01
        • 2017-05-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-02
        • 2016-04-02
        • 1970-01-01
        相关资源
        最近更新 更多