Pb avec une exp reg

Résolu/Fermé
maure - 26 avril 2005 à 13:20
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 - 9 juin 2005 à 12:26
Bonjour,
j'au un petit probleme avec cette expression reguliere que j'ai triuvé sur le net: est ce que vous pouvez me dire ce qu'elle fait
$title = preg_replace("/&#([0-9]+);/", "&#\${1};", $title);
puis aussi j'aimerais savoir pourquoi on termine les expression regulieres par le carectere i comme dans l'exemple suivant :
preg_match("/(http:\/\/([^\/]*))/i", $url, $matches);

merci;

10 réponses

sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 659
26 avril 2005 à 13:32
RTFM ?


Ce sont des expressions régulière de type perl.

/chaîne à chercher/options

Le 'i' signifie qu'il ne faut pas tenir compte de la casse (minuscules/majuscules).


Ta première expression régulière détecter les entités HTML tel que & #163;
Mais elle ne fait aucun remplacement.
Autrement dit tu pourrais mettre cette ligne en commentaire: elle ne sert à rien.


Quand à la seconde, a vue de nez, elle extrait le nom de machine(+domaine) d'une URL.
Exemple:
http://www.commentcamarche.net/forum/index.php3?cat=0
--> http://www.commentcamarche.net
0
Merci beaucoup pour ta réponse,

j'ai encore une autre petite question,

ça sert à quoi aussi le caractére % qu'on met au debut et à la fin d'une expression reguliere exempl :

%<a href=\"(.+?)\"[^>]*>(.+?)</a>([^<]*)%i"

PS: je developpe en PHP et pas en perl
merci encore
0
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 659
26 avril 2005 à 15:28
je developpe en PHP et pas en perl

oui oui, j'avais compris.
Mais les procédures preg_* de php utilisent le moteur d'expression régulières de perl (pcre).


Le caractère % pourrait aussi bien être & @ ou °

En fait, c'est un séparateur.
Avec le moteur pcre, il faut utiliser le même caractères pour spécifier début et fin d'expression régulière.
On utilise généralement /, mais parfois on prend un autre caractère quand on veut utiliser / à l'intérieur de l'expression régulière.

Exemple:
"%<a href=\"(.+?)\"[^>]*>(.+?)</a>([^<]*)%i"
"&<a href=\"(.+?)\"[^>]*>(.+?)</a>([^<]*)&i"
"²<a href=\"(.+?)\"[^>]*>(.+?)</a>([^<]*)²i"
et
"§<a href=\"(.+?)\"[^>]*>(.+?)</a>([^<]*)§i"

sont strictement équivalentes.
0
Je ne peux te dire qu'une seule chose: MERCIIIIIIIIIIIIIIIII

et peut être à bien tot.
0
Bonjour,

je me suis permu de remonter ce poste, car j'ai eu un autre pb du meme genre.

voila mon pb, j'aimerai recuperer le titre d'une page web à partir du sources html, j'ai trouvé cette exp reg

eregi("<title>(.*)</title>", $data, $title);

sur le net elle marche bien mais quand un site contient plusieurs balises <title> cette expression ne marche plus, car elle prends tous ce qui est entre le 1er balise <title> et le derier balise </title>.


avez vous une solution pour cette exp reg?
j'aimerais aussi comprendre pourquoie elle fait ça?

merci
0
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 659 > maure
17 mai 2005 à 17:49
Il faut utiliser:
eregi("<title>(.*?)</title>", $data, $title);
0
maure > sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019
18 mai 2005 à 10:36
Merci pour ta réponse, mais ca ne marche pas, il m'affiche cette erreur

Warning: eregi(): REG_BADRPT in ...

Je pense que c 'est une erreur de masque?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 659
18 mai 2005 à 10:49
arf... dans ce cas abandonne eregi et utilise le module pcre de php.

eregi est trop limité.
0
Bonjoue sebsauvage et merci pour tes réponses
une fois de plus j'ai une question sur les exps regs

tu paurrais me dire pkoi cette exp ne prends pas en compte le text suivant:

voici l'exp :

/valign="top"><b>([^<]*)<\/b><\/td>.*?<a href="([^"]*)" class="filenews" target="_top">(.*?)<\/a>/mi

voici le text:

<TR valign="middle">
<TD width="1%" NOWRAP VALIGN="TOP"><B>12:33</B></TD>
<TD></TD>

<TD align="left" width="95%"><A HREF="..." class="fileNews" TARGET="_top">...</A></TD>

<TD width="1%" NOWRAP VALIGN="TOP">19/05/2005</TD>
<TD valign="top"><I>(CF)</I></TD>
</TR>



alors que ca devait afficher la date le lien et le titre ....
0
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 659
19 mai 2005 à 16:45
Essai avec /esi au lieu de /mi
0
merciiiiiiiiiiiiiiiiiiiiiiiiiiii,
ca marche
est ce que tu peut medire la signification des option e, s, i

merci encore
0
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 659
19 mai 2005 à 17:46
Au temps pour moi: le 'e' n'est pas nécessaire
(il n'est utile que pour les remplacements).


En revanche le 's' est utile:

Habituellement le point (.) signifie "n'importe quel caractère" (sous-entendu: sauf retour à la ligne, tabulation, etc.)
Donc comme ce que tu recherche était sur plusieurs lignes, il ne le trouvait pas.

Avec 's', le point signifie "absolument n'importe quel caractère", ce qui permet de tout récupérer, y compris les retours à la ligne.
0
maure Messages postés 5 Date d'inscription mardi 26 avril 2005 Statut Membre Dernière intervention 23 juin 2006
9 juin 2005 à 11:31
Bonjour sebsauvage et merci pour toutes tes réponses,
tu ne connais pas une option qui permet de demander à une exp reg de commencer le traitement du bas vers le haut?
0
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 659
9 juin 2005 à 12:26
tu ne connais pas une option qui permet de demander à une exp reg de commencer le traitement du bas vers le haut?

Pas à ma connaissance.

La solution pourrait être d'utiliser l'expression régulière pour établir une liste des emplacement des blocs de texte intéressants, puis de parcourir cette liste du bas vers le haut.
0