Expression régulière

Expression régulière - Java - Programmation

Marsh Posté le 18-10-2005 à 22:46:09    

Je souhaite récupère à partir d'une page Web, tout ce qui se trouve entre les balises <body> et </body>
Pour cela j'ai pensé utiliser une expression régulière en Java.
 
Cependant je n'arrive pas à spécifier que je veux <body> + tout ce qui suit mais qui est différent de '</body>' + </body>
 
Voici ma regex qui ne fonctionne pas:

Code :
  1. <body>([^<]*)</body>


 
Une idée ?
 
Merci d'avance :)

Reply

Marsh Posté le 18-10-2005 à 22:46:09   

Reply

Marsh Posté le 18-10-2005 à 23:03:12    

Ta regexp refuse tout < dans le code entre les deux balises, donc tout body contenant d'autres balises à l'intérieur. [:spamafote]
Accessoirement, t'es sur qu'une regexp serait l'idéal pour ton truc, autant niveau lisibilité que performances :/


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 18-10-2005 à 23:31:29    

oui si t'a page web est valide XHTML t'a la ressource d'utiliser DOM ou SAX...
 
si elle l'est pas y'a des parseurs HTML...dont un dans le package java (il est caché mais il y en a un, sans doc, mais facile à comprendre néenmoins...regarde, y'a un tutorial dessus http://java.sun.com/products/jfc/t [...] bookmarks/


---------------
Jubi Photos : Flickr - 500px
Reply

Marsh Posté le 18-10-2005 à 23:34:10    

arg parser tout l'html ... je pensais à un truc _simple_, pas à encore plus de calcul pour un truc aussi bête :/


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 19-10-2005 à 09:53:08    

En partant du pricinipe que dans un document html tu n'a qu'une seule balise <body>, un expression du type <body>(.*)</body> devrait fonctionner, en positionnant l'option MULTILINE ou son équivalent.
Pour les balises html pouvant être imbriqué dans elles mêmes comme la balise table par exemple, le problême ne peut pas être résolue avec une seule reg exp.

Reply

Marsh Posté le 19-10-2005 à 10:26:47    

Tout cela m'a l'air bien violent.
 
Si tu récupères une page web, il y a fort parier que tu travailles avec des streams. Pdt que tu as le stream sous la main, pq ne pas détecter l'ouverture et la fermeture des balises, et traiter la partie pertinente du flux ?
 
Parce que là, ça sent la page stockée dans un StringBuffer (voire un String!) avant traitement, et c'est peut-être pas nécessaire ni idéal.
 
Je m'orienterais plutôt vers un automate fini (bien grand mot pour généraliser ce que je propose supra).


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 19-10-2005 à 17:46:43    

Bonjour,
Pourrait-on tout simplement fait un replace de <body> et de </body> par "" sachant qu'il ne se repetent qu'une fois...

Reply

Marsh Posté le 19-10-2005 à 18:22:20    

Mais vous êtes tous à la masse aujourd'hui ? [:mlc]
 
Oui, si la page est "déjà" en mémoire, zyva à coup de replace et tout ce que tu veux. Mais a priori, je ne vois pas pq on chargerait toute la page pour ensuite faire ce genre de processing. Mieux vaut traiter le flux quand il passe.
 
Pour juste une page, on s'en fout, mais s'il faut le faire avec n pages, de préférence bien grasses, on va encore gueuler que Java, c'est lent.
 
Et puis, c'est tellement plus élégant de faire le processing sur le flux quand il coule sous vos pieds que de charger tout le bazar sans réflechir. [:pingouino]


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed