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 で使用されるマークダウン編集コントロールに非常に似ています。

明確化

価値があるので、私はC#を使用しています。また、これらは許可したい唯一の実際のタグ/マークダウンです。変換されるテキストの量は、300 文字程度未満になります。

4

4 に答える 4

6

最良の方法は、使用している言語に移植されたMarkdownライブラリのバージョンを見つけることです(質問で指定していません)。


STRONGとEMのみを処理する必要があり、C#を使用していることを明確にしたので、Markdown.NETを調べてこれらのタグがどのように実装されているかを確認することをお勧めします。ご覧のとおり、実際には2つの式です。コードは次のとおりです。

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 に答える