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

lumesh Messages postés 564 Date d'inscription jeudi 21 février 2002 Statut Membre Dernière intervention 7 novembre 2008 - 5 déc. 2003 à 06:54
cs_TASIOT Messages postés 20 Date d'inscription jeudi 18 septembre 2003 Statut Membre Dernière intervention 26 septembre 2008 - 16 août 2006 à 12:11
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

cs_TASIOT Messages postés 20 Date d'inscription jeudi 18 septembre 2003 Statut Membre Dernière intervention 26 septembre 2008
16 août 2006 à 12:11
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é...
Gwinyam Messages postés 47 Date d'inscription vendredi 7 octobre 2005 Statut Membre Dernière intervention 2 janvier 2008
15 août 2006 à 15:22
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 :)
kimmelf2 Messages postés 267 Date d'inscription lundi 22 septembre 2003 Statut Membre Dernière intervention 27 novembre 2005
29 juin 2004 à 22:50
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\
cs_TASIOT Messages postés 20 Date d'inscription jeudi 18 septembre 2003 Statut Membre Dernière intervention 26 septembre 2008
28 juin 2004 à 23:24
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 !!
jimbz Messages postés 6 Date d'inscription jeudi 29 mai 2003 Statut Membre Dernière intervention 26 novembre 2004
28 juin 2004 à 23:09
Vraiment super pratique comme référence d'un débutant ds les expressions "(régulières)|(rationnelles)"! Je pense que tout le monde a pensé la meme chose la première qu'on en voit une, non?(c'est a dire: Mais keskecékeca???) Enfin encore une fois très bien fait: très très clair, complet et concis!

Sinon pour les trads anglaises jcroi kon est condamné a les utiliser: vs avez jamais dit librairie a la place de bibilothèque? Sinon on peut dir library et regexp, ca règle le pb lol

Allez, encore merci a biento
perig Messages postés 358 Date d'inscription vendredi 1 novembre 2002 Statut Membre Dernière intervention 5 septembre 2006
24 juin 2004 à 20:16
Merci pour cette info [;)].

C'est malheureusement souvent le prob. des traductions (Ils pourraient le signaler tout de même que c’est une traduction de l’Anglais).
[:(]
cs_TASIOT Messages postés 20 Date d'inscription jeudi 18 septembre 2003 Statut Membre Dernière intervention 26 septembre 2008
24 juin 2004 à 19:16
Explication sur expression rationnelle ou expression reguliere :

Expression rationnelle est le seul terme exact !

En effet, expression reguliere est venu par l'anglais dont la traduction de Expression rationnelle est Regular Expression abregé en RegExp.
Mais en francais, Regular Expression ne veut pas dire expression reguliere, mais bien expression rationnelle !!

En esperant avoir réglé le prob des programmeurs PHP qui se prennent la tête tous les week ends ... :)
cs_TASIOT Messages postés 20 Date d'inscription jeudi 18 septembre 2003 Statut Membre Dernière intervention 26 septembre 2008
24 juin 2004 à 19:16
Explication sur expression rationnelle ou expression reguliere :

Expression rationnelle est le seul terme exact !

En effet, expression reguliere est venu par l'anglais dont la traduction de Expression rationnelle est Regular Expression abregé en RegExp.
Mais en francais, Regular Expression ne veut pas dire expression reguliere, mais bien expression rationnelle !!

En esperant avoir réglé le prob des programmeurs PHP qui se prennent la tête tous les week ends ... :)
kimmelf2 Messages postés 267 Date d'inscription lundi 22 septembre 2003 Statut Membre Dernière intervention 27 novembre 2005
7 déc. 2003 à 01:10
disons que si on veux que ca respecte la norme de la RFC, c'est pas a la portee du debutant
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
6 déc. 2003 à 11:44
j'ai pas dit ça non plus, mais reconnaître s'il y a xxxxx@xxxxx.xxx ça ne suffit pas.
kimmelf2 Messages postés 267 Date d'inscription lundi 22 septembre 2003 Statut Membre Dernière intervention 27 novembre 2005
6 déc. 2003 à 01:57
je dirais pas que l'adresse email est le truc le + difficile a filtrer mais ...

:-)
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
5 déc. 2003 à 17:48
ah, ben je ne savais pas que ça s'utilisait, c'est la première fois que je vois ça, merci pour la précision.

pour les adresses E-mails, c'est plus complexe qu'on ne le croit, allez donc jeter un oeil sur www.regxlib.com y a des expressions de plusieurs lignes de long qui permettent de réellement en reconnaître une (tous les formats imaginables, c'est basé sur les conventions de je ne sais pas quel organisme. ça permet même de reconnaître les adresses dont le domaine est une IP)
perig Messages postés 358 Date d'inscription vendredi 1 novembre 2002 Statut Membre Dernière intervention 5 septembre 2006
5 déc. 2003 à 17:39
revinc --> désolé, je ne connais pas tout!! Je début en php (enfin si on veut) de plus ta fonction permet de reconaitre un nombre ou une chaine mais si tu veux vérifier une adresse email je pense que les expréssions régulières c'est plus simple. non?

Kirua --> j'ai trouvé "expression rationnelle" sur un site et j'ai aussi emprunté un petit livre sur le php (vraiment le minimum) et ils disent "expressions rationnelles"
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
5 déc. 2003 à 14:08
j'avais jamais entendu qu'on disait expression rationnelle... tu as vu ça où ?? pour moi y a que expression régulière, c'est ce qui s'utilise le plus souvent.
revinc Messages postés 385 Date d'inscription mardi 15 octobre 2002 Statut Membre Dernière intervention 19 décembre 2017
5 déc. 2003 à 13:17
Sauf qu'utiliser les expressions régulières est hyper lent surtout quand il y a déjà les fonctions pour comme is_numeric() pour vérifier si une chaîne de caractères est un nombre
lumesh Messages postés 564 Date d'inscription jeudi 21 février 2002 Statut Membre Dernière intervention 7 novembre 2008
5 déc. 2003 à 06:54
pas mal du tout !
sympa ton tuts, bien fait . thx.
Rejoignez-nous