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 21/11/2006, 16h06   #1
Invité de passage
 
Inscription : février 2003
Messages : 25
Détails du profil
Informations forums :
Inscription : février 2003
Messages : 25
Points : 3
Points : 3
Par défaut chaine commencant par X et qui fini par Y

Bonjour,

Comment trouver dans une chaîne, une sous chaîne qui commence par ... et se termine par ... ?

J'ai essayé les 2 solution suivante sans résultats :

Code :
1
2
3
4
5
6
7
8
 
 
$contents="<span>Lorem</span> ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna 
aliquyam erat, sed diam voluptua.";
 
echo(eregi_replace("<span>.</span>","<span style='background: green'>\\1</span>",$contents));
echo('<br />')
echo(eregi_replace("(^<span>)(</span>$)","<span style='background: yellow'>\\1</span>",$contents));

Mercdi d'avance.
oamram est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2006, 16h20   #2
Membre éclairé
 
Avatar de sohnic
 
Femme
bioinfo
Inscription : mai 2003
Messages : 385
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : bioinfo

Informations forums :
Inscription : mai 2003
Messages : 385
Points : 363
Points : 363
Bonjour,
Tu n'etais pas loin !
Code :
1
2
3
4
5
6
7
 
<?
$contents="<span>Lorem</span> ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna 
aliquyam erat, sed diam voluptua.";
 
echo(eregi_replace("<span>(.+)</span>","<span style='background: green'>\\1</span>",$contents));
?>
Et j'obtiens le surlignage de Lorem

S.
__________________
http://www.noctinfo.fr/

(\ _ /)
(='.'=) Voici Lapinou. Aidez-le à conquérir le monde en le reproduisant.
(")-(")
sohnic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2006, 20h32   #3
Invité de passage
 
Inscription : février 2003
Messages : 25
Détails du profil
Informations forums :
Inscription : février 2003
Messages : 25
Points : 3
Points : 3
Je n'arrive pas à comprendre pourquoi le code suivant ne fonctionne pas :

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
32
33
34
35
36
37
38
39
40
41
42
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
	<title></title>
</head>
<body>
 
<?php
ob_start();
// tout ton code PHP, renvoi de HTML, ....
?>
 
<span>Lorem</span> ipsum <a href='#'>dolor</a> sit amet, <span>consetetur sadipscing elitr</span>, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna 
aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus 
est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et 
dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, 
no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor 
invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd 
gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
 
<?php
$contents = ob_get_contents();
ob_end_clean();
 
$mot='dolor';
$contents1=eregi_replace("($mot)","<span style='background: green'>\\1</span>",$contents);
$contents2=eregi_replace("($mot)[^(<span>(.*)</span>)]","<span style='background: yellow'>\\1</span>",$contents);
$contents3=eregi_replace("($mot)[^(<a href='#'>(.*)</a>)]","<span style='background: yellow'>\\1</span>",$contents);
 
echo($contents1);
echo('<hr />');
echo($contents2);
echo('<hr />');
echo($contents3);
echo('<hr />');
?>
 
</body>
</html>
Dans l'affichage contents2, des lettres disparaissent mystérieusement.
Dans l'affichage contents3, cela ne fonctionne pas !!!

Je n'arrive pas à trouver les erreurs...

Merci d'avance.
oamram est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2006, 14h25   #4
Invité de passage
 
Inscription : février 2003
Messages : 25
Détails du profil
Informations forums :
Inscription : février 2003
Messages : 25
Points : 3
Points : 3
Personne n'a une solution à me proposer ?

Pour compléter la demande voici le but de mon projet :

Avant d'envoyer une page dynamique, je balaye le code html (bufférisé) afin de rechercher certains mots dans la page qui serait référencés dans un dictionnaire.
Si Je trouve un tel mot, je voudrais lui assigner un lien vers le dico (en un mot l'encadrer d'une balise <a href="...">...</a>). Le problème c'est qu'il faut que je ne traite pas les mots qui sont déjà entre des balises <a></a> sinon il y aura une double imbrication. De même je ne dois pas extraire les mots dans une balise (img src="..."... /> car si le mot cherché se trouve dans sr="...", cela va poser des problèmes.
Cela me semble pas si compliqué que cela, et je pensais m'en sortir avec les expressions régulières, plutôt que de parser le code en XML.
Bon en espérant avoir été claire... si quelqu'un a une solution à me proposer.
Merci d'avance !
oamram est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2006, 15h50   #5
Membre Expert
 
Homme
Inscription : janvier 2004
Messages : 1 238
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : janvier 2004
Messages : 1 238
Points : 1 421
Points : 1 421
Citation:
Envoyé par oamram
Code :
eregi_replace("($mot)[^(<span>(.*)</span>)]",...
Ca ne fonctionne absoluement pas comme ca !

1ere chose : passer a preg_replace. La syntaxe te paraitra peut etre plus étrange, mais c'est beaucoup mieux (plus rapide) et surtout tu as acces a des modifications d'expressions qui te seront necessaires ici pour gerer les balises imbriquées

Ensuite, si tu veux recuperer ce qui est contenu entre 2 balises, il faut faire qqchose comme :

Code :
... = preg_replace("#<balise>([^<]+)</balise>#U", ..., ...);
__________________
PHP :
Regle n°1 : mysql_query(...), mysql_connect(...) et mysq_select_db(...) doivent EN DEBUG etre suivies de or die(mysql_error()); (mais jamais en production)
Regle n°2 : Mieux encore : mysql_query($requete) or die("$requete<br/>".mysql_error());
Regle n°3 : echo '<pre>';var_dump($var);echo '</pre>'; affiche le contenu et le type d'une variable.
Publiez vos textes de fantasy et de science-fiction sur http://www.cercledefaeries.com/concours/
Fladnag 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 23h22.


 
 
 
 
Partenaires

Hébergement Web