Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/12/2010, 21h43   #1
Invité de passage
 
Inscription : décembre 2010
Messages : 5
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 5
Points : 1
Points : 1
Par défaut regex sur page web

Bonjour,

je voudrai faire une regex sur une page web.
voici m regex :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
$regex = '@<h3>
			<a href="#">&nbsp;&nbsp;
				<span class="foot_news_title_MU">(*)</span>&nbsp;&nbsp;
				<span class="Text_Today_Time">GMT+1</span>
				<span class="Text_news_big_Syn">&nbsp;|&nbsp;<strong>(*)</strong></span>
			</a>
			</h3>
			<div style="padding:5px;" align="left">
				<table width="99%" border="0" cellspacing="0" cellpadding="0">
					<tr>
						<td align="center" valign="middle" width="170">
							<img src="(*)" width="150" height="95" title="*" alt="*" />
						</td>
						<td align="left" valign="middle" class="Text_news_small_Syn">(*)</td>
					</tr>
				</table>
			</div>@';
Je lui applique la fonction clean pour echapper tous les caracteres spéciaux :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function clean($string){
	$string = str_replace(".","\.",$string);
	$string = str_replace("+","\+",$string);
	$string = str_replace("-","\-",$string);
	$string = str_replace("*","\*",$string);
	$string = str_replace("?","\?",$string);
	$string = str_replace("|","\|",$string);
	$string = str_replace("-","\-",$string);
	$string = str_replace("$","\$",$string);
	$string = str_replace("()","\()",$string);
	$string = str_replace("(","\(",$string);
	$string = str_replace(")","\)",$string);
	$string = str_replace("{}","\{}",$string);
	$string = str_replace("{","\{",$string);
	$string = str_replace("}","\}",$string);
	$string = str_replace("[]","\[]",$string);
	$string = str_replace("[","\[",$string);
	$string = str_replace("]","\]",$string);
 
	return $string;
}
Malgré ça, mon code ne marche pas.

voici la partie de la page qui doit satisfaire l'expression réguliere :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<h3><a href="#">&nbsp;&nbsp;<span class="foot_news_title_MU">00:45</span>&nbsp;&nbsp;<span class="Text_Today_Time">GMT+1</span><span class="Text_news_big_Syn">&nbsp;|&nbsp;<strong>NESS NESSMA &ndash; Rediffusion</strong></span><br/>&nbsp;&nbsp;Commence dans 3 heures et 3 minutes.</a></h3>
 
                    <div style="padding:5px;" align="left">
 
                      <table width="99%" border="0" cellspacing="0" cellpadding="0">
 
                        <tr>
 
                          <td align="center" valign="middle" width="170"><img src="assets/front/grille/ness150x95.jpg" width="150" height="95" title="NESS NESSMA – Rediffusion" alt="NESS NESSMA – Rediffusion" /></td>
 
                          <td align="left" valign="middle" class="Text_news_small_Syn">
 
						  						  </td>
 
                        </tr>
 
                      </table>
 
                    </div>
Merci pour vos réponses.
djamelzahal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2010, 22h16   #2
Membre éclairé
 
Inscription : octobre 2004
Messages : 235
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 235
Points : 360
Points : 360
Je ne suis pas expert en regexp, mais tu es sur que les blancs ne vont pas invalider ton expression ? Déja entre le "<h3>" et le "<a href..." au debut ça ne colle pas...

Et tu devrais essayer de la construire progressivement, en vérifiant qu'elle valide bien la sous-partie de ta chaine cible.
Joker-eph est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2010, 22h19   #3
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 278
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 278
Points : 2 324
Points : 2 324
Quelle horreur cette regex


Tu peux et dois largement simplifier. Exemple tu as qu'une balise <img> donc pas besoin d'une regex aussi longue pour récupérer le src...

Sinon tu peux mettre des tableaux en paramètre de str_replace, cela sera plus propre


Code php :
1
2
 
$sortie = str_replace(array('a', 'b'), array('c', 'd'), $entree);
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2010, 01h23   #4
Membre Expert
 
Avatar de Eric2a
 
Homme Eric Garidacci
Inscription : septembre 2005
Messages : 1 057
Détails du profil
Informations personnelles :
Nom : Homme Eric Garidacci
Âge : 41

Informations forums :
Inscription : septembre 2005
Messages : 1 057
Points : 1 564
Points : 1 564
Salut,

La fonction preg_quote() protège les caractères spéciaux des expressions rationnelles.

Citation:
preg_quote() ajoute un antislash devant tous les caractères de la chaîne str. Cela est très utile si vous avez une chaîne qui va servir de masque, mais qui est générée durant l'exécution.

Les caractères spéciaux qui seront protégés sont les suivants : . \ + * ? [ ^ ] $ ( ) { } = ! < > | : -
__________________

N'oubliez pas le vote des messages utiles ainsi que le Tag [Résolu].

Mon Site Web : Corse - Actualité, Météo, Vidéos, Logiciels, ...
Eric2a est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2010, 15h24   #5
Membre actif
 
Avatar de Epica84
 
Christophe GUALANO
Étudiant
Inscription : décembre 2008
Messages : 164
Détails du profil
Informations personnelles :
Nom : Christophe GUALANO
Âge : 22
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : décembre 2008
Messages : 164
Points : 156
Points : 156
Envoyer un message via MSN à Epica84
Sérieux

Comme dit Madfrix quel horreur cette expression !!!

En plus, regex est obsolète utilise preg_match

Et si vous voulez mon aide. Merci de me passer la page en question en entière et ce que vous voulez récupérez .

Je vous expliquerai le principe pour les 3 premiers enregistrement.

Cordialement
__________________
ARLES, du 02 au 05 Avril 2010, Féria de Pâques.
Epica84 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 16/12/2010, 19h46   #6
Invité de passage
 
Inscription : décembre 2010
Messages : 5
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 5
Points : 1
Points : 1
Par défaut Regex

Bonjour,

Ca ne marche toujours pas. j'ai simplé lexpression reguliere au maximum histoire de tester :

voici le code
Code :
1
2
3
4
5
6
7
8
9
10
 
$regex = '/<html>(.)/';
$page = file_get_contents($url);
echo $page . "<br/><br/>";
if(preg_match(preg_quote($regex),$page,$matches) != 0){
	echo "matchs : " . $matches[1] . "<br/>";
}
else{
	echo "rien trouve";
}
ça m'affiche toujours rien trouve. la page est bien lu et s'affiche comme prévu.

Merci de votre aide.
djamelzahal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2010, 15h39   #7
Modérateur
 
Avatar de s.n.a.f.u
 
Homme
Développeur Web
Inscription : août 2006
Messages : 2 700
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 37
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : août 2006
Messages : 2 700
Points : 3 357
Points : 3 357
Citation:
Envoyé par Epica84 Voir le message
En plus, regex est obsolète utilise preg_match


C'est ereg qui est déprécié : $regex n'est ici qu'une variable pour stocker son pattern...
__________________
  • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
  • Merci d'utiliser les balises de code (# dans l'éditeur)
  • Si votre problème est réglé, merci d'utiliser le bouton
S.N.A.F.U
s.n.a.f.u est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2010, 15h46   #8
Modérateur
 
Avatar de s.n.a.f.u
 
Homme
Développeur Web
Inscription : août 2006
Messages : 2 700
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 37
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : août 2006
Messages : 2 700
Points : 3 357
Points : 3 357
Citation:
Envoyé par djamelzahal Voir le message
Code :
1
2
3
4
5
6
7
8
9
10
 
$regex = '/<html>(.)/';
$page = file_get_contents($url);
echo $page . "<br/><br/>";
if(preg_match(preg_quote($regex),$page,$matches) != 0){
	echo "matchs : " . $matches[1] . "<br/>";
}
else{
	echo "rien trouve";
}
ça m'affiche toujours rien trouve. la page est bien lu et s'affiche comme prévu.

Merci de votre aide.
Code :
$regex = '/<html>(.)/';
Essaies sans les preg_quotes : il n'y a aucun caractère interdit dans ce pattern.
Si tu utilises preg_quote, tes parenthèses seront considérées comme des caractères à trouver et non comme des éléments capturants...
__________________
  • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
  • Merci d'utiliser les balises de code (# dans l'éditeur)
  • Si votre problème est réglé, merci d'utiliser le bouton
S.N.A.F.U
s.n.a.f.u est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h14.


 
 
 
 
Partenaires

Hébergement Web