将 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 标记 [重复]
用java开发编译器之:Thompson构造,将正则表达式转换为有限状态自动机