RegEx suppriment les balises BBCode d'une chaîne
Question
Je travaille sur une fonctionnalité qui utilise le JQuery markItUp! éditeur comme éditeur de BBCode. Je ne permettant à un petit sous-ensemble de BBCodes y compris les éléments suivants:
[b]
[i]
[quote]
[quote=Mr Incredible]
[img]
[url]
[youtube]
J'ai un champ de 1500 caractères « Description » qui utilise l'éditeur, mais je prévois également de stocker un 150 caractères digérer de la description avec tous les BBCode dépouillé.
J'utilise actuellement simple RegEx pour faire en C #. Il en fait des armes nucléaires intégré BBCodes dans une chaîne, mais il laisse derrière lui un grand nombre de « contenu bruyant » comme le [img] URL ou [youtube] ID vidéo que je aimerais aussi retirer de la digérer.
Voici mon RegEx actuelle:
public static String StripBBCode(string bbCode)
{
string r = Regex.Replace(bbCode,
@"\[(.*?)\]",
String.Empty, RegexOptions.IgnoreCase);
// Finally, replace all newlines with a space
r = Regex.Replace(r,
@"(\r\n|\n\r|\r|\n)+",
@" ", RegexOptions.IgnoreCase);
return r;
}
Si je lance la chaîne suivante grâce à cette fonction, je reçois le résultat indiqué ci-dessous:
source
This is [b]bold[/b]. This is [i]italic[/i].
Here is an image:
[img]http://www.phatmac.com/Pics/Movies/Incredibles.jpg[/img]
Here is a link to [url=http://espn.go.com]ESPN[/url].
Here is a YouTube video:
[youtube]WJ0UkZ3W4FA[/youtube]
Résultat
est en gras. Ceci est en italique. Voici une image: http://www.phatmac.com/Pics/Movies/Incredibles. jpg Voici un lien vers ESPN. Voici une vidéo YouTube: WJ0UkZ3W4FA
Voici ce que je veux revenir
est en gras. Ceci est en italique. Voici une image: Voici un lien vers ESPN. Voici une vidéo YouTube:
Comment puis-je modifier ma fonction StripBBCode () pour y parvenir?
ÉDITÉ
La suggestion de David ci-dessous dans la première réponse était correcte.
Voici ce que j'utilise maintenant:
string r = Regex.Replace(s,
@"\[youtube\].*\[\/youtube\]",
String.Empty, RegexOptions.IgnoreCase);
r = Regex.Replace(r,
@"\[img\].*\[\/img\]",
String.Empty, RegexOptions.IgnoreCase);
La solution
Vous avez obtenu plusieurs balises que vous voulez que le contenu supprimé, et le reste où vous voulez que les balises retirées.
Ne pas remplacer des [img].*[/img]
avec String.Empty et [youtube].*[/youtube]
, et tout ce dont vous avez besoin le contenu enlevé, puis faites votre déménagement de [.*]
.
Edit:
Je ne suis pas un expert regex non plus, mais je pense que @"\[img\].*?\[/img\]"
est ce que vous voulez. Je ne pense pas que vous avez besoin des parenthèses dans @"\[(.*?)\]"
, je pense que dans ce contexte parenthèses des moyens pour enregistrer le texte correspondant afin que vous puissiez correspondre à nouveau avec \1
.