2010-09-04 3 views
0

J'ai quelque chose comme contenuUne question expression régulière

<div class="c2"> 
<div class="c3"> 
<p>...</p> 
</div> 
</div> 

Ce que je veux est de faire correspondre HTML intérieur du div.c2. Le contenu de celui-ci peut varier beaucoup. Le seul problème que je suis confronté ici est que comment puis-je le faire fonctionner de sorte que le div de fermeture correcte est prise?

+3

« ? [...] comment puis-je le faire fonctionner de telle sorte que la div fermeture de droite est prise » - C'est exactement ce que les expressions régulières » t faire. Utilisez un analyseur HTML. – Gumbo

+1

Pourriez-vous reformuler cette question? Je ne comprends pas vraiment ce que tu veux faire. –

+2

Cela a été demandé tellement de fois avant s'il vous plaît utiliser la fonctionnalité de recherche de site pour des raisons de ne pas faire, ou voir mon post ci-dessous – Woot4Moo

Répondre

1

Vous ne pouvez pas. Ce problème est impossible à résoudre avec les expressions régulières classiques et avec la plupart des implémentations d'expressions régulières existantes. Cependant, certains moteurs regex ont un support spécial pour la correspondance équilibrée des paires. Voir, par exemple, here (.NET). Bien que même dans ce cas votre regex sera capable d'analyser seulement un sous-ensemble de textes syntaxiquement corrects (par exemple, que se passe-t-il si un </div> est inclus dans un commentaire?). Vous avez besoin d'un analyseur HTML pour obtenir des résultats fiables.

+0

Vous pourrait gérer les commentaires avec une implémentation d'expression régulière qui prend également en charge les modèles récursifs. – Gumbo

+0

@Gumbo - hmm, probablement ... Mais que se passe-t-il si la source n'est pas syntaxiquement correcte? Personnellement, je ne serais pas à l'aise avec une solution qui doit explicitement prendre en charge chaque possibilité (que faire si j'en manque)? Je préférerais un analyseur (peut-être spécialisé, simplifié). – atzz

0

Une chance que ce sera toujours valide XHTML? Si c'est le cas, vous feriez mieux de l'analyser en XML plutôt que d'essayer de le regex.

0

Supprimez la première ligne, supprimez la dernière ligne. Problème résolu. Pas besoin de RegEx.

Le schéma suivant fonctionne bien avec la mise en œuvre .Net RegEx:

\<div class="c2"\>{[\n a-z.<>="0-9/]+}\</div\> 

Et nous remplacer par \ 1.

Entrée:

<div class="c2"> 
<div class="c3"> 
<p>...</p> 
</div></div></div></div></div></div></div></div> 
</div> 

Sortie:

<div class="c3"> 
<p>...</p> 
</div></div></div></div></div></div></div></div> 
Questions connexes