Avant que quelqu'un ne me le demande, je ne fais aucune sorte de screenschraping. J'essaie d'analyser une chaîne html pour trouver un div avec un certain ID. Je ne peux pas pour la vie de moi obtenir cela pour travailler. L'expression suivante a fonctionné dans un cas, mais pas dans un autre. Je ne suis pas sûr si cela a à voir avec des éléments supplémentaires dans le code HTML ou non.Regex - Trouver le contenu de div par id avec divs imbriqués
<div\s*?id=(\""|"|")content(\""|"|").*?>\s*?(?>(?! <div\s*?> | </div>) | <div\s*?>(?<DEPTH>) | </div>(?<-DEPTH>) | .?)*(?(DEPTH)(?!))</div>
Il est de trouver la première div id avec le droit correctement, mais il se ferme alors au premier div de fermeture, et non la div liées.
<div id="firstdiv">begining content<div id="content">some other stuff
<div id="otherdiv">other stuff here</div>
more stuff
</div>
</div>
Cela devrait ramener
<div id="content">some other stuff
<div id="otherdiv">other stuff here</div>
more stuff
</div>
, mais pour une raison quelconque, il n'est pas. Il est ramènerait:
<div id="content">some other stuff
<div id="otherdiv">other stuff here</div>
Quelqu'un at-il une expression plus facile à gérer cette situation?
Pour clarifier, ceci est dans .NET, et j'utilise le mot-clé DEPTH. Vous pouvez trouver plus de détails here.
upvoted - c'est une excellente question pour enseigner aux nouveaux programmeurs les limites de ce que les expressions régulières peuvent accomplir. – Cybis
Peut-être pas en pur Reg. Exp. mais cela peut certainement être fait avec .net. Voir ma réponse. – pro3carp3