Expresion reguliere : exclure une chaine de caractaires
3 réponses
BillyNoGates
Bonjour,
Je cherche =E0 extraire les differents formulaires d'une page html.
j'ai deja prepar=E9 une expression reguliere mais elle ne fonctionne pas
tr=E8s bien dans le cas ou la page possede plusieur formulaire car elle
n'exclus pas la chaine de caractaire '<form'.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Paul Gaborit
À (at) 12 Oct 2005 02:27:49 -0700, "BillyNoGates" écrivait (wrote):
Je cherche à extraire les differents formulaires d'une page html. j'ai deja preparé une expression reguliere mais elle ne fonctionne pas très bien dans le cas ou la page possede plusieur formulaire car elle n'exclus pas la chaine de caractaire '<form'.
Quelqu'un sait t'il comment je pourais fair pour exclure une chaine de caractaires d'une expression (par exemple la chaine "<form") ?
Pour cette dernière question: on ne peut pas.
Votre expression est en fait équivalente à :
<form[^>]*>(.*)</form>
Comme les éléments 'form' ne sont pas imbricables, vous pouvez utiliser les quantificateurs non gourmands :
<form[^>]*>(.*?)</form>
J'imagine que vous utilisez les modificateurs m/.../is pour ne pas être perturbé par les passages à la ligne et l'usage de majusucles/minuscules.
Mais le seule vraie bonne solution est d'utiliser un vrai parseur de (HTML|XML). Il en existe beaucoup sous forme de modules. Certains sont écrits en Perl pur. Cela vous garantira une extraction parfaite dans *tous* les cas. Comme celui-ci par exemple :
<form ...> ... <!-- </form> --> ... </form>
qui est un formulaire tout à fait valide (si on remplace les ... par ce qui va bien) mais que votre expression ne saura pas extraire convenablement (à cause du commentaire HTML).
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
À (at) 12 Oct 2005 02:27:49 -0700,
"BillyNoGates" <aurelien.jacak@gmail.com> écrivait (wrote):
Je cherche à extraire les differents formulaires d'une page html.
j'ai deja preparé une expression reguliere mais elle ne fonctionne pas
très bien dans le cas ou la page possede plusieur formulaire car elle
n'exclus pas la chaine de caractaire '<form'.
Quelqu'un sait t'il comment je pourais fair pour exclure une chaine de
caractaires d'une expression (par exemple la chaine "<form") ?
Pour cette dernière question: on ne peut pas.
Votre expression est en fait équivalente à :
<form[^>]*>(.*)</form>
Comme les éléments 'form' ne sont pas imbricables, vous pouvez
utiliser les quantificateurs non gourmands :
<form[^>]*>(.*?)</form>
J'imagine que vous utilisez les modificateurs m/.../is pour ne pas
être perturbé par les passages à la ligne et l'usage de
majusucles/minuscules.
Mais le seule vraie bonne solution est d'utiliser un vrai parseur de
(HTML|XML). Il en existe beaucoup sous forme de modules. Certains sont
écrits en Perl pur. Cela vous garantira une extraction parfaite dans
*tous* les cas. Comme celui-ci par exemple :
<form ...>
...
<!-- </form> -->
...
</form>
qui est un formulaire tout à fait valide (si on remplace les ... par
ce qui va bien) mais que votre expression ne saura pas extraire
convenablement (à cause du commentaire HTML).
--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>
À (at) 12 Oct 2005 02:27:49 -0700, "BillyNoGates" écrivait (wrote):
Je cherche à extraire les differents formulaires d'une page html. j'ai deja preparé une expression reguliere mais elle ne fonctionne pas très bien dans le cas ou la page possede plusieur formulaire car elle n'exclus pas la chaine de caractaire '<form'.
Quelqu'un sait t'il comment je pourais fair pour exclure une chaine de caractaires d'une expression (par exemple la chaine "<form") ?
Pour cette dernière question: on ne peut pas.
Votre expression est en fait équivalente à :
<form[^>]*>(.*)</form>
Comme les éléments 'form' ne sont pas imbricables, vous pouvez utiliser les quantificateurs non gourmands :
<form[^>]*>(.*?)</form>
J'imagine que vous utilisez les modificateurs m/.../is pour ne pas être perturbé par les passages à la ligne et l'usage de majusucles/minuscules.
Mais le seule vraie bonne solution est d'utiliser un vrai parseur de (HTML|XML). Il en existe beaucoup sous forme de modules. Certains sont écrits en Perl pur. Cela vous garantira une extraction parfaite dans *tous* les cas. Comme celui-ci par exemple :
<form ...> ... <!-- </form> --> ... </form>
qui est un formulaire tout à fait valide (si on remplace les ... par ce qui va bien) mais que votre expression ne saura pas extraire convenablement (à cause du commentaire HTML).
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
Paul Gaborit
À (at) Wed, 12 Oct 2005 11:57:08 +0200, Paul Gaborit écrivait (wrote):
Quelqu'un sait t'il comment je pourais fair pour exclure une chaine de caractaires d'une expression (par exemple la chaine "<form") ?
Pour cette dernière question: on ne peut pas.
Pour être plus correct, on peut le faire mais ce n'est ni efficace ni lisible dans le cas qui vous intéresse. Jugez plutôt :
<form[^>]*>((?:.*(?!</forms*>))*.)</forms*>
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
À (at) Wed, 12 Oct 2005 11:57:08 +0200,
Paul Gaborit <Paul.Gaborit@invalid.invalid> écrivait (wrote):
Quelqu'un sait t'il comment je pourais fair pour exclure une chaine de
caractaires d'une expression (par exemple la chaine "<form") ?
Pour cette dernière question: on ne peut pas.
Pour être plus correct, on peut le faire mais ce n'est ni efficace ni
lisible dans le cas qui vous intéresse. Jugez plutôt :
<form[^>]*>((?:.*(?!</forms*>))*.)</forms*>
--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>