将 Markdown 转换为 HTML 的正则表达式

Posted

技术标签:

【中文标题】将 Markdown 转换为 HTML 的正则表达式【英文标题】:Regular expression to convert mark down to 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

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

澄清

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

【问题讨论】:

【参考方案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);

【讨论】:

用什么语言真的不重要......应该有一个简单的正则表达式来处理条件。 我对这个问题做了一些澄清。 Markdown.NET 长期停产。相反,有这个 *** 实现:MarkdownSharp - blog.***.com/2009/12/introducing-markdownsharp【参考方案2】:

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

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

【讨论】:

我刚刚在kore-nordmann.de/blog/do_NOT_parse_using_regexp.html看到了以下文章。【参考方案3】:

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

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

【讨论】:

【参考方案4】:

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

【讨论】:

以上是关于将 Markdown 转换为 HTML 的正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式 - 将 HTML 转换为有效的 XML 标记 [重复]

正则表达式之简易markdown文件解析器

用java开发编译器之:Thompson构造,将正则表达式转换为有限状态自动机

通过定义标题的正则表达式拆分 Markdown 文本文件

Swift 将 javascript 正则表达式转换为 ios 正则表达式

如何将 javascript 正则表达式转换为安全的 Java 正则表达式?