J'écris BBcode convertisseur en HTML.
Le convertisseur doit ignorer les étiquettes non fermées.Regex BBCode au format HTML
Je pensais à 2 options pour le faire:
1) correspondent à tous les tags en une fois en utilisant un appel regex, comme:
Regex re2 = new Regex(@"\[(\ /?(?:b|i|u|quote|strike))\]");
MatchCollection mc = re2.Matches(sourcestring);
puis, boucle sur MatchCollection en utilisant 2 pointeurs pour trouver démarrer et ouvert tags et que le remplacement avec la balise html droite.
2) appellent regex temps multiples pour chaque étiquette et remplacer directement:
Regex re = new Regex(@"\[b\](.*?)\[\/b\]");
string s1 = re.Replace(sourcestring2,"<b>$1</b>");
Qui plus est efficace?
La première option utilise une regex, mais elle nécessite que je parcourt toutes les balises et trouve toutes les paires, et ignore les balises qui n'en ont pas.
Un autre point positif est que je ne me soucie pas du contenu entre les tags, je travaille juste et les remplace en utilisant la position. Dans la deuxième option, je n'ai pas besoin de m'inquiéter de faire une boucle et de faire une fonction de remplacement spéciale.
Mais il faudra exécuter plusieurs regex et les remplacer.
Que pouvez-vous suggérer?
Si la deuxième option est la bonne, il y a un problème avec regex \[b\](.*?)\[\/b\
]
comment puis-je résoudre ce problème pour correspondre aussi multi lignes comme:
[b]
test 1
[/b]
[b]
test 2
[/b]
il ne fonctionne pas sur une chaîne comme: "[b] bla bla [/ b] bla bla [b]" + "\ r \ n" + "bla bla [/ b]"; – ilann
Testé avec ce code exact et cela a fonctionné très bien, donc je ne suis pas tout à fait sûr de ce que le problème pourrait être. Mais si vous pouviez copier le code ci-dessus et vérifier cela :) Éditer: déplacer le code dans ma réponse – Buildstarted