OVH Cloud OVH Cloud

regex

6 réponses
Avatar
guy
Bonjour à tous ...

Dans mon ancien post, on me disait pour récupérer des liens dans une page
HTML d'utiliser les expressions régulières. Ca marche pas mal sauf que je me
prends la tête avec certains caractères réservés aux expressions comme le ?
et le - pour n'en citer quelques uns...

les liens du type href=http://www.trucmuche.html et les href="page.html"
sont facilement récupérables par contre j'ai du mal avec
href="page----.html" et "href="page.php?variable=valeur" par ce qu'ils
utilisent précisément les caractères cités plus haut...

Je n'arrive pas à les prendre en compte voici la regex que j'utilise :
...
String motif = "href=\"[a-z\\W]*\\.[a-z]{3,5}\"";
...

Merci d'avance
Guillaume

6 réponses

Avatar
Kupee
guy wrote:
Bonjour à tous ...

Dans mon ancien post, on me disait pour récupérer des liens dans une page
HTML d'utiliser les expressions régulières. Ca marche pas mal sauf que je me
prends la tête avec certains caractères réservés aux expressions comme le ?
et le - pour n'en citer quelques uns...

les liens du type href=http://www.trucmuche.html et les href="page.html"
sont facilement récupérables par contre j'ai du mal avec
href="page----.html" et "href="page.php?variable=valeur" par ce qu'ils
utilisent précisément les caractères cités plus haut...

Je n'arrive pas à les prendre en compte voici la regex que j'utilise :
...
String motif = "href="[a-zW]*.[a-z]{3,5}"";
...


Désolé d'insister mais moi je préconisais un parseur html et je
fournissait même une url. Après tu fais comme tu veux, mais avec des
regexp t'as pas fini d'en baver a mon avis

Avatar
Stephane Zuckerman
Bonjour,

Dans mon ancien post, on me disait pour récupérer des liens dans une page
HTML d'utiliser les expressions régulières. Ca marche pas mal sauf que je me
prends la tête avec certains caractères réservés aux expressions comme le ?
et le - pour n'en citer quelques uns...

les liens du type href=http://www.trucmuche.html et les href="page.html"
sont facilement récupérables par contre j'ai du mal avec
href="page----.html" et "href="page.php?variable=valeur" par ce qu'ils
utilisent précisément les caractères cités plus haut...

Je n'arrive pas à les prendre en compte voici la regex que j'utilise :
...
String motif = "href="[a-zW]*.[a-z]{3,5}"";


Pour le point d'interrogation :

String url = "([a-z]|W)*";
String motif = "href="" + url + ".[a-z]{3,5}" + "(?" + url + ")?"";

Est-ce que ce n'est pas suffisant ?

--
"Je deteste les ordinateurs : ils font toujours ce que je dis, jamais ce
que je veux !"
"The obvious mathematical breakthrough would be development of an easy
way to factor large prime numbers." (Bill Gates, The Road Ahead)

Avatar
Guy
Je vais essayer çà, mais il semble (pour le tiret) que le W qui concerne
les non-mots ne prenne pas en compte certains caractères comme le tiret par
exemple...

Je rêve où c'est vrai, la doc dit que le w concerne les lettres de a à z,
de A à Z, et les chiffres de 0 à 9, plus le caractère souligné je pense...
donc le W qui est l'équivalent de ^w devrait prendre en compte tous les
autres caractères non ?

Guillaume (qui rame un peu)

"Stephane Zuckerman" a écrit dans le message de news:

Bonjour,

Dans mon ancien post, on me disait pour récupérer des liens dans une page
HTML d'utiliser les expressions régulières. Ca marche pas mal sauf que je
me
prends la tête avec certains caractères réservés aux expressions comme le
?
et le - pour n'en citer quelques uns...

les liens du type href=http://www.trucmuche.html et les href="page.html"
sont facilement récupérables par contre j'ai du mal avec
href="page----.html" et "href="page.php?variable=valeur" par ce qu'ils
utilisent précisément les caractères cités plus haut...

Je n'arrive pas à les prendre en compte voici la regex que j'utilise :
...
String motif = "href="[a-zW]*.[a-z]{3,5}"";


Pour le point d'interrogation :

String url = "([a-z]|W)*";
String motif = "href="" + url + ".[a-z]{3,5}" + "(?" + url + ")?"";

Est-ce que ce n'est pas suffisant ?

--
"Je deteste les ordinateurs : ils font toujours ce que je dis, jamais ce
que je veux !"
"The obvious mathematical breakthrough would be development of an easy
way to factor large prime numbers." (Bill Gates, The Road Ahead)



Avatar
Guy
Bon la technique de stéphane ne fonctionne pas (où alors c'est moi) voici le
bout de prog :
Pb = pas de prise en compte des - et des ?
En ce qui concerne les autres post sur des parsers la technique est bonne
malheureusement je n'ai pas trouvé satisfaction ...
Peut-être sui-je passé à côté de qqch !!!

package netessai;
import java.util.*;
import java.util.regex.*;

public class LinkParser {
String html="";

public HTMLParser(String s) {
html = s;
}

public void trouveLiens() {

String url = "([a-z]|W)*";
String motif = "href="" + url + ".[a-z]{3,5}" + "(?" + url +
")?"";

Pattern p = Pattern.compile(motif);
Matcher m = p.matcher(html);
while(m.find())
System.out.println(m.group());
}

"Stephane Zuckerman" a écrit dans le message de news:

Bonjour,

Dans mon ancien post, on me disait pour récupérer des liens dans une page
HTML d'utiliser les expressions régulières. Ca marche pas mal sauf que je
me
prends la tête avec certains caractères réservés aux expressions comme le
?
et le - pour n'en citer quelques uns...

les liens du type href=http://www.trucmuche.html et les href="page.html"
sont facilement récupérables par contre j'ai du mal avec
href="page----.html" et "href="page.php?variable=valeur" par ce qu'ils
utilisent précisément les caractères cités plus haut...

Je n'arrive pas à les prendre en compte voici la regex que j'utilise :
...
String motif = "href="[a-zW]*.[a-z]{3,5}"";


Pour le point d'interrogation :

String url = "([a-z]|W)*";
String motif = "href="" + url + ".[a-z]{3,5}" + "(?" + url + ")?"";

Est-ce que ce n'est pas suffisant ?

--
"Je deteste les ordinateurs : ils font toujours ce que je dis, jamais ce
que je veux !"
"The obvious mathematical breakthrough would be development of an easy
way to factor large prime numbers." (Bill Gates, The Road Ahead)



Avatar
Guy
Bon après de multiple essai, j'ai enfin trouvé la bonne formule qui semble
fonctionner pour tous les liens (enfin j'espère !!!)
La voici :

String url = "([a-z0-9A-Zp{Punct}&&[^"]])*";
String motif = "href="" + url + "(.[a-z]{3,})*" + url + ""?";

Effectivement la non prise en compte de - et ? dans le W semble être un bug
du regex (est-ce un bug ou est-ce normal ??? je sais pas)
On peut le contourner en ajoutant p{Punct} et en mettant &&[^caractère]
(en remplacant caractère par celui approprié en faisant attention
que le caractère en question ne soit pas un caractère de contrôle sinon çà
pose problème)
Le système a l'air de se mélanger les pinceaux entre les caractères
eux-mêmes et les caractères de contrôle

Mais est-il possible d'inclure un caractère ASCII grâce à son numéro ? Cela
éviterait bien des problèmes ...

Guillaume
Avatar
Alain
juste pour info

regarde la bibliothèque java jTidy
qui peux lire une page HTML, la nettoyer et la
charger comme un arbre DOM XML...

tou t'arrivera tout cuit dans le bec

guy wrote:

Bonjour à tous ...

Dans mon ancien post, on me disait pour récupérer des liens dans une
page HTML d'utiliser les expressions régulières. Ca marche pas mal
sauf que je me prends la tête avec certains caractères réservés aux
expressions comme le ? et le - pour n'en citer quelques uns...