你会如何写一个正则表达式来标记转换分解成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
非常类似于计算器使用的标记下来的编辑控件。
澄清
对于什么是值得的,我使用C#。 此外,这些是唯一真正的标签/降价,我想允许。 文本的量被转换将小于300个字符左右。
最好的办法是找到一个版本移植到任何语言您使用的是降价库(你没有在你的问题中指定)。
现在你已经澄清,你只需要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);
}
一个单一的正则表达式不会做。 每个文本标记都会有它自己的HTML翻译。 更好地研究如何在现有的转换器来实现,以得到它是如何工作的想法。
http://en.wikipedia.org/wiki/Markdown#See_also
我不知道C#具体,但在Perl这将是:
S /
\ * \ *(。*?)\ * \ * /
\ <粗体> $ 1 \ </粗体> /克
S /
\ *(。*?)\ * /
\ <EM> $ 1 \ </ EM> /克
我碰到下面的职位是建议不要这样做。 在我来说,虽然我希望保持它的简单,但想到我会张贴此每JOP的的情况下,别人想做这一建议。