7

您将如何编写正则表达式将标记转换为 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 个字符左右。

4

4 回答 4

6

最好的方法是找到移植到您使用的任何语言的 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);
}
于 2008-09-21T11:02:22.233 回答
5

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

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

于 2008-09-21T10:46:54.097 回答
1

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

\\\*\\\*(.*?)\\\*\\\*/
\< bold\>$1\<\/bold\>/g
\\\*(.\*?)\\\*/
\< em\>$1\<\/em\>/g
于 2008-09-21T11:51:34.347 回答
0

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

于 2008-09-21T12:01:10.937 回答