Pb avec une exp reg

Résolu
maure -  
sebsauvage Messages postés 32893 Date d'inscription   Statut Modérateur Dernière intervention   -
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   Statut Modérateur Dernière intervention   15 662
 
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
maure
 
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   Statut Modérateur Dernière intervention   15 662
 
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
maure
 
Je ne peux te dire qu'une seule chose: MERCIIIIIIIIIIIIIIIII

et peut être à bien tot.
0
maure
 
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   Statut Modérateur Dernière intervention   15 662 > maure
 
Il faut utiliser:
eregi("<title>(.*?)</title>", $data, $title);
0
maure > sebsauvage Messages postés 32893 Date d'inscription   Statut Modérateur Dernière intervention  
 
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   Statut Modérateur Dernière intervention   15 662
 
arf... dans ce cas abandonne eregi et utilise le module pcre de php.

eregi est trop limité.
0
maure
 
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   Statut Modérateur Dernière intervention   15 662
 
Essai avec /esi au lieu de /mi
0
maure
 
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   Statut Modérateur Dernière intervention   15 662
 
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   Statut Membre Dernière intervention  
 
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   Statut Modérateur Dernière intervention   15 662
 
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