2008-09-21 48 views
6

如何編寫正則表達式將標記轉換爲HTML?例如,您可以鍵入以下內容:正則表達式將標記轉換爲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個字符左右。

回答

7

,最好的辦法是找到一個版本移植到任何語言您使用的是降價庫(你沒有在你的問題中指定)。


現在你已經澄清,你只需要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); 
} 
5

一個正則表達式不會這樣做。每個文本標記都會有它自己的html翻譯器。更好地研究現有轉換器的實現方式,以瞭解其工作原理。

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

+0

我只是碰到下面的文章來得http://kore-nordmann.de/blog/do_NOT_parse_using_regexp.html。 – mattruma 2008-09-21 11:33:13

+0

可能是一個好主意,將此鏈接添加到您的原始文章。 – jop 2008-09-21 11:43:45

1

我不知道C#具體,但在Perl這將是:
S/
\ * \ *(*?)\ * \ */
\ <大膽> $ 1 \ < /加粗>/G
S/
\ *(。*?)\ */
\ < EM> $ 1 \ </em>的/ G

0

我碰到fo建議不要這樣做的post。在我的情況下,雖然我希望保持簡單,但我認爲我會根據jop's的建議張貼這個建議,以防其他人想要這樣做。

相關問題