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 20/06/2007, 12h28   #1
Nouveau Membre du Club
 
Avatar de kernigansnotdead
 
Inscription : septembre 2005
Messages : 64
Détails du profil
Informations forums :
Inscription : septembre 2005
Messages : 64
Points : 26
Points : 26
Envoyer un message via ICQ à kernigansnotdead
Par défaut Nesting of markers

Bonjour,

voila, j'ai écrit une fonction qui comporte des instructions if(regex...) imbriqués. Et en fait, le mieux c'est de d'abord montrer le code....
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 
for ($i=0;$i<sizeof($lines);$i++)  #for each line of the source code of the file
					{
 
						/////////////////////////////////////////////////
						////////// SEARCHING FOR COMPANY NAME ///////////
						/////////////////////////////////////////////////
						if(preg_match('/<h1 style="margin-left:20px;margin-top:5px;">(.*)<\/h1>/', $lines[$i], $matches))		
							{
								#echo 'Line = '.htmlspecialchars($lines[$i]).'<br>';	
								echo '<b>'.$fd_cpn.'- '.$matches[1].'</b><br>';	
								$db_company_name=ereg_replace("'","''",$matches[1]);
 
								/*if(in_array($db_company_name,$companyNames))
									{
										#echo 'skip this file';
										echo $fd_cpn.'- '.$matches[1].' already in array!<br>';	
									}
								else
									{
										#inserting company names to array
										$inserttoarray=array_push($companyNames,$db_company_name);
									}*/
 
									/////////////////////////////////////////////////
									////////// SEARCHING FOR COMPANY TYPE ///////////
									/////////////////////////////////////////////////
									echo 'xxxxxxxxxxxxxxxxxxxxxxxxx';
									if(ereg("Firmentyp",$lines[$i]))		
										{									echo 'yyyyyyyyyyyyyyyyyyyyyy';
		}
Voila, le problème est tout simple : le 'yyyyyyyyyyyyyyy' ne s'affiche pas,
pas tant que se trouve le 'ereg' de imbriqué. Si j'avais par exemple une trim à la place,
Code :
1
2
3
4
 
if(trim("Firmentyp",$lines[$i]))		
										{									echo 'yyyyyyyyyyyyyyyyyyyyyy';
		}
ou n'importe quoi d'autres, le 'yyyyyyyyyyyyyyyyyyy' s'afficherait.

N'est il donc pas possible d'embriquer des ereg a l'interieur d'autres ereg ou fonctions du meme type, comme preg_match par exemple?
Est ce que c'est ce que l'on sous-entend quand on dit 'ereg() doesn't support the nesting of markers?'

Merci pour votre réponse
knd
kernigansnotdead est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2007, 10h20   #2
Membre chevronné
 
Avatar de Korko Fain
 
Étudiant
Inscription : août 2005
Messages : 632
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2005
Messages : 632
Points : 632
Points : 632
Petites remarques :
Dans ton preg_match, tu devrais peut etre ajouter un ? après ton *.
Remplace ton ereg_replace par un str_replace.
Au lieu de ereg("Firmentyp",$lines[$i]) pourquoi ne pas utiliser strpos ?
Korko Fain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2007, 08h46   #3
Nouveau Membre du Club
 
Avatar de kernigansnotdead
 
Inscription : septembre 2005
Messages : 64
Détails du profil
Informations forums :
Inscription : septembre 2005
Messages : 64
Points : 26
Points : 26
Envoyer un message via ICQ à kernigansnotdead
Bonjour,

et merci pour ta réponse. En fait, j'ai résolu le problème en changeant l'algorythme du programme entier.

Merci en tout cas pour ton aide,

knd
kernigansnotdead est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2007, 09h39   #4
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
Salut

De manière générale :
  • Évite les expressions rationnelles si tu peux les éviter ;
  • N'utilise jamais ereg_* mais preg_*, car les ereg_* ont disparu du core de PHP depuis quelques versions.
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h59.


 
 
 
 
Partenaires

Hébergement Web