TUTORIAL SUR LES EXPRESSIONS RATIONNELLES (EXPRESSIONS RÉGULIÈRES)

Signaler
Messages postés
564
Date d'inscription
jeudi 21 février 2002
Statut
Membre
Dernière intervention
7 novembre 2008
-
Messages postés
20
Date d'inscription
jeudi 18 septembre 2003
Statut
Membre
Dernière intervention
26 septembre 2008
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/18426-tutorial-sur-les-expressions-rationnelles-expressions-regulieres

Messages postés
20
Date d'inscription
jeudi 18 septembre 2003
Statut
Membre
Dernière intervention
26 septembre 2008

Bonjour Gwinyam,

Tout d'abord, je tiens à dire que j'ai largement progressé en matière d'expression rationnelle et que ton problème n'en est plus un.
Tu devrais peut-être te renseigner sur la fonction preg_replace_callback() qui permet entre autre de remplacer une chaine par le resultat d'une fonction à qui on passe en argument la chaine trouvée (plus d'info sur php.net).

<?php

$chaine = 'La carré de 4 est ::carre(4)::'; // La chaine dans laquelle tu vas rechercher un element
$profil = '`::([a-z_\-]+)(\((.*?)\))?::`is'; // Non sensible à la casse et non gourmand

$result = preg_replace_callback($profil, 'parse', $chaine);

function parse($match)
{
$return = '';
eval ('$return = '.$match[1].'('.$match[3].');');

return $return;
}

function carre($nb=0)
{
return $nb * $nb;
}
echo $result;

?>

Voila. Cette fonction va renvoyer "Le carré de 4 est 16".
Tu peux également utiliser la fonction sans ses parenthèse dans ton texte. Genre "Le carré de 0 est ::carre::".

En espérant t'avoir aidé...
Messages postés
47
Date d'inscription
vendredi 7 octobre 2005
Statut
Membre
Dernière intervention
2 janvier 2008

Salut,
Tout d'abord bravo pour ce tuto, il est plutôt complet et très bien pour les newbies...

Dites les gars, en ce qui me concerne, je suis sur un projet de CMS, mais j'ai un léger problème, à quelque chose près similaire à celui de Tasiot.

Je m'explique:
L'idée est de permettre un utilisateur d'appeller des fonctions php dans le contenu des articles. Ces fonctions sont tirées d'une librairie (ou bibliothèque) créée pour la gestion du contenu. Le problème c'est que j'ai des paramètre à passer.

Exemple:
un contenu tel que je souhaite qu'il soit tapé par l'utilisateur "abcde::disp_profil(52)::fghi"
Donc l'idée est de faire appel à une fonction php qui remplacera "::disp_profil(52)::" par ce que retournera la fonction php disp-profil, avec l'argument 52, argument qui peut varier de taille selon le besoin. Et c'est là que je suis paumé...

Vous auriez pas un petit coup de main en stock à me filer?
svp :)
Messages postés
267
Date d'inscription
lundi 22 septembre 2003
Statut
Membre
Dernière intervention
27 novembre 2005

je pense que ([^]]) s'interprete en " n'importe quelle chaine qui ne contient pas un ] " ???

mais il ne te manquerais pas un * ???

j'ai trouve (en javascript) cet exemple :
pour transformer un [link xxxxxx]yyyyy/link en [xxxx yyyy], l'expression etai :

\[link (.*)\](.*)\[\/link\]

d'ou pour toi :

\[b\]([^]].*)\/b\
Messages postés
20
Date d'inscription
jeudi 18 septembre 2003
Statut
Membre
Dernière intervention
26 septembre 2008

Bon voila, moi je m'y connais pas mal en PHP donc aussi un peu en RegExp ou plutot ExpRatio lol mais moi aussi je réussi à avoir des failles... :( et oui !

J'explique mon prob, j'ai une expression rationnelle qui remplace les quelque chose par quelque chose. A noter que pour récupérer le contenu des parenthèses capturantes, il suffit de mettre \\ suivi du numéro de la ligne, comme avec le tableau créé par ereg.
Ainsi, si on veux remarqué le contenu que l'on trouve entre et , dans mon cas, on marque comme fonction :
echo ereg_replace("\[b\]([^]])\/b\","\\1",$texte);
Et ca marche !! Mais le seul problème est que si on marque ] dans notre texte $texte entre et , eh bien ca beug légèrement.

Ainsi, je demande à tous ceux qui ont une réponse, de me contacter soit par ces commentaires, soit par mon email : os.com@free.fr

MERCI D'AVANCE !!
Afficher les 16 commentaires