Pb avec une exp reg
Résolu
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;
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
-
ModérateurRTFM ?
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 -
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 -
Modérateurje 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. -
Je ne peux te dire qu'une seule chose: MERCIIIIIIIIIIIIIIIII
et peut être à bien tot.-
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 -
Modérateur@maureIl faut utiliser:
eregi("<title>(.*?)</title>", $data, $title); -
@sebsauvageMerci 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?
-
-
Modérateurarf... dans ce cas abandonne eregi et utilise le module pcre de php.
eregi est trop limité.-
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 ....
-
-
ModérateurEssai avec /esi au lieu de /mi
-
merciiiiiiiiiiiiiiiiiiiiiiiiiiii,
ca marche
est ce que tu peut medire la signification des option e, s, i
merci encore -
ModérateurAu 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. -
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? -
Modérateurtu 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.