正则表达式将标记转换为HTML

时间:2020-03-06 14:30:14  来源:igfitidea点击:

我们将如何编写正则表达式以将标记向下转换为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#。另外,这些是我要允许的唯一真实标签/降价。转换的文本量将少于300个字符左右。

解决方案

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

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

最好的方法是找到Markdown库的版本,该版本可移植到我们正在使用的任何语言(我们未在问题中指定)。

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

private string DoItalicsAndBold (string text)
{
    // <strong> must go first:
    text = Regex.Replace (text, @"(\*\*|__) (?=\S) (.+?[*_]*) (?<=\S) ", 
                          new MatchEvaluator (BoldEvaluator),
                          RegexOptions.IgnorePatternWhitespace | RegexOptions.Singleline);

    // Then <em>:
    text = Regex.Replace (text, @"(\*|_) (?=\S) (.+?) (?<=\S) ",
                          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);
}

我不了解Cspecific,但是在perl中会是:
s /
\ * \ (。?)\ * \ * /
\ <粗体> $ 1 \ </ bold> / g
s /
\ (。?)\ * /
\ <em> $ 1 \ </ em> / g

我遇到了以下建议不要这样做的帖子。就我而言,尽管我希望保持简单,但我想我会根据每个人的建议发布此消息,以防其他人想要这样做。