正则表达式将标记转换为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
我遇到了以下建议不要这样做的帖子。就我而言,尽管我希望保持简单,但我想我会根据每个人的建议发布此消息,以防其他人想要这样做。