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 19/03/2011, 13h30   #1
Invité de passage
 
Inscription : août 2009
Messages : 22
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 22
Points : 3
Points : 3
Par défaut Capture d'une chaine uniquement si pas entre 2 balises (référence avant et arrière)

Bonjours,
Je me suis un peu documenté sur les références avant et arrière mais cela ne semble pas suffire au cas qui me pose problème.

Je dois mettre en italique (bbcode) un string si et seulement si elle ne l'est pas déjà.
Ça peut paraître simple mais l'application ne l'est pas

Code :
Je suis une belle string en métal
=> On remplace "string" par [italique]string[/italique]

Code :
Je suis une belle [italique]string[/italique] en métal
=> On ne fait rien

Code :
[italique]Je suis une belle string en métal[/italique]
=> On ne fait rien
C'est ce dernier cas qui me pose problème.

Ma regex est pour l'instant #(?<!\[italique\]).*(string).*(?!\[/italique\])#im ce qui ne convient pas.
Merci
Jarode01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/03/2011, 16h08   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
tu doit mettre les .* en ungreddy .*?
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/03/2011, 12h39   #3
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
Bonjour,

On peut effectivement faire des look around très classes, mais il y a parfois des solutions simples :

Code :
1
2
3
4
5
 
$reg = '#\[italique\].*string.*\[/italique\]#im';
if (!preg_match($reg, $str)) {
    $str = str_replace('string', '[italique]string[/italique]', $str);
}
Il me semble que c'est suffisant et cela a de fortes chances d'être plus performant.
__________________
  • 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 27/03/2011, 21h39   #4
Invité de passage
 
Inscription : août 2009
Messages : 22
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 22
Points : 3
Points : 3
Dans ce cas là ça coince pour ce cas:
Citation:
Je suis une belle string en métal. Je suis une belle [italique]string[/italique] en métal.

[italique]Je suis une belle string en métal[/italique]
(désolé de ne pas avoir été assez clair )
Jarode01 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 22h43.


 
 
 
 
Partenaires

Hébergement Web