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 04/06/2007, 23h16   #1
Membre du Club
 
Inscription : décembre 2004
Messages : 193
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : décembre 2004
Messages : 193
Points : 59
Points : 59
Par défaut faire une sorte de BBcode

Amis du soir, bonsoir,

Je préviens, je suis une bille en expression régulière, mais je me soigne !-)

Voila, je cherche à faire une règle qui me permettrait de remplacer
par
Code :
<span class="form">langage utilisé : php</span>
J'ai cherché ici et la, mais je n'ai rien trouvé sur la récupération de variable via les expression régulière.
En fait sans vouloir être exigent, plus que la solution, je cherche surtout l'explication pour comprendre ce qui pour le moement me dépasse....

Merci d'avance.
jexl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/06/2007, 23h42   #2
Nouveau Membre du Club
 
Inscription : juin 2006
Messages : 56
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : juin 2006
Messages : 56
Points : 29
Points : 29
Voici un élément de réponse...

Première solution,
Tu fais du remplacement tout simplement par le contenu de ta balise lang
Code :
1
2
3
 
$strin = '[code lang="php"]';
echo preg_replace('`\[code +lang="([a-zA-Z#+]+)"\]`','<span class="form">langage utilisé : \\2</span>',$strin);
Traduction on cherche les chaines commçant par "[code" suivi de au moin 1 espace puis la chaine de caractère "lang="" puis une suite de caractère contenant toutes les lettres de l'alphabet et/ou le caractère # et/ou +(pour les langages tel c# ou c++) et on les remplacent par la chaine que tu veux mettre. Le \\2 ira ici chercher le contenu de la 2ème parenthèse capturante.

Deuxième solution,
Pareil mais en utilisant une fonction de callback via pre_replace_callback, mais pour le code je te laisse un peu chercher..
QuantuX est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/06/2007, 00h00   #3
Membre du Club
 
Inscription : décembre 2004
Messages : 193
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : décembre 2004
Messages : 193
Points : 59
Points : 59
Merci Quantux pour ces explications,
Je venais de trouver une formule que j'ai adapté :
Code :
1
2
3
4
5
// mail
   $regMailSimple="\[email\] ?([^\[]*) ?\[/email\]";
   $regMailEtendu="\[email ?=([^\[]*) ?] ?([^]]*) ?\[/email\]";
   if (ereg($regMailSimple, $t)) $t=ereg_replace($regMailSimple, "<a href=\"mailto:\\1\">\\1</a>", $t);
   else $t=ereg_replace($regMailEtendu, "<a href=\"mailto:\\1\">\\2</a>", $t);
Mais j'avoue que tes explications sont claires et m'aident beaucoup.
Merci encore et @+
jexl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/06/2007, 00h14   #4
Nouveau Membre du Club
 
Inscription : juin 2006
Messages : 56
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : juin 2006
Messages : 56
Points : 29
Points : 29
Petites choses à savoir avec les expressions régulières en php:
toute la serie des fonctions ereg_*, oublie, se sont des vielles fonctions, elles sont trop lentes
utilise les preg_* (4fois plus rapide)
Avec les preg_*, il faut délimiter ton masque :
je m'explique,
avec ereg_* tu ecrivait '[a-z]+'
avec preg_* tu ecrira '`[a-z]+`'

je te conseille le caractère ` pour delimiter ton masque, carctère peu utilisé (AltGr+7)

tu peux aussi placer des caractère d'option après le masque, par exemple insensible à la casse :
'`[a-z]+`i'

Quelques liens :
- http://expreg.com/
- http://fr.php.net/manual/fr/referenc...ern.syntax.php

A oui aussi pour ton pb, pense plutôt fonction callback, c'est mieux
QuantuX 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 07h47.


 
 
 
 
Partenaires

Hébergement Web