Question

Comment écririez-vous une expression régulière pour convertir mark down en HTML? Par exemple, vous devez saisir ce qui suit:

This would be *italicized* text and this would be **bold** text

Ceci devra alors être converti en:

This would be <em>italicized</em> text and this would be <strong>bold</strong> text

Très similaire au contrôle d'édition "mark down" utilisé par stackoverflow.

Clarification

Pour ce que cela vaut, j’utilise C #. En outre, ce sont les uniquement véritables tags / markdown que je souhaite autoriser. La quantité de texte en cours de conversion serait inférieure à 300 caractères.

Était-ce utile?

La solution

La meilleure solution consiste à rechercher une version de la bibliothèque Markdown dans la langue que vous utilisez (vous ne l'avez pas spécifiée dans votre question).

Maintenant que vous avez précisé que vous souhaitez uniquement traiter STRONG et EM et que vous utilisez C #, je vous recommande de consulter Markdown.NET pour voir comment ces balises sont implémentées. Comme vous pouvez le constater, il s’agit en fait de deux expressions. Voici le code:

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);
}

Autres conseils

Une simple expression rationnelle ne fera pas l'affaire. Chaque balise de texte aura son propre traducteur HTML. Regardez mieux comment les convertisseurs existants sont implémentés pour avoir une idée de son fonctionnement.

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

Je ne connais pas spécifiquement C #, mais en Perl ce serait:
s /
  \ * \ * (. *?) \ * \ * /
  \ < gras > $ 1 \ < / bold > / g
s /
  \ * (. *?) \ * /
  \ < em > $ 1 \ < / em > / g

Je suis tombé sur le post qui recommande de ne pas le faire. Dans mon cas, je cherche à rester simple, mais je pensais publier cette recommandation selon la recommandation de jop au cas où une autre personne le souhaiterait. faire ceci.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top