Aller au menu - Aller au contenu

Les expressions régulières (Partie 2/2)

Pour accéder à cette section
Connectez-vous !
connexion_rpx
Page Précédente  1  2  3  4 
Pseudo Commentaire
Page Précédente  1  2  3  4 
Hors ligne christobal # Posté le 16/09/2010 à 11:09:24

Bonjour,
bon je viens de me prendre a méga mal de tête mais cela en valait la peine.
je viens de réussir du premier coups une preg_replace sur les deux que j'ai besoin de faire.

la deuxième dois me permettre de supprimer toutes les balises <br /> s'il y en a plus de 1, sachant que certaine peuvent être séparées par un espace. j'ai donc fait ça, mais cela ne fonctionne pas :
preg_replace('#<br />{2, }#i', '', $description)

je ne comprend pas mon erreur.
Merci de votre aide
Hors ligne -SkYnet- # Posté le 02/10/2010 à 18:23:39
Avatar

Avis : Très bon

Euh mateo dans l'intro cette $^*ù^-_ de regex en regardant vite fait j'ai cru que c'en était une

"Nous finissons tous par mourir, notre but n'est pas d'être immortel, notre but est de créer quelque chose qui nous survivra." Chuck Palahniuk
 
Hors ligne dldstyle # Posté le 15/10/2010 à 14:58:53

Tout d'abord je tiens à féliciter M@ateo21 pour ces deux excellents tutoriels que j'ai avalé avec le non moins excellent livre "Concevez votre site web avec PHP et MySQL". Ces tutoriels m'ont permit d'apprendre une notion du PHP qui m'effrayait un peu :-)

Je voulais signaler deux petites erreurs dans le regex concernant l'email.

Un nom de domaine ne peut pas contenir de underscore ("_") et il ne peut pas commencer par un point ou tiret.
Ainsi contact@_domaine.com, contact@.domaine.com ou contact@-domaine.com ne sont pas valide.

Autre chose, un email ne peut pas commencer par un tiret, underscore ou point.
Ainsi -contact@domaine.com, _contact@domaine.com ou .contact@domaine.com ne sont pas valide.

Dernier détail, il est possible d'avoir un email associé à un sous domaine. Ex contact@vente.domaine.com

Après quelques tests (pas sûr d'avoir tout testé), je suis arrivé à cette regex :
^[a-z0-9A-Z]+[-a-z0-9A-Z._]+@[a-z0-9]+[-a-z0-9]*([.]?){1,}[a-z0-9-]*\.[a-z]{2,6}$
Hors ligne hitsch # Posté le 14/11/2010 à 21:57:50

SUPER INTERESSANT
Hors ligne aurel2108 # Posté le 17/11/2010 à 14:22:11
On n'est jamais trop G33k
Avatar
Flux RSS

Juste un petit commentaire pour dire qu'il y a maintenant des numéros de tél. en 07 et 09 :°

Sinon super tutoriel, comme toujours ;)

Image utilisateur
Linux Power !
An Ubuntu 10.10 and Windows Vista user.
Je crois en 2012 comme en la fin de Windows. :)
Être rémunéré pour tester des applications de l'App Store
 
Hors ligne orquato # Posté le 21/12/2010 à 20:34:59
Avatar

bonjour,

J'arrive à comprendre une partie du code ci-dessous à part ce bout ci : (?<!www) (\w+-?) que je n'ai pas vu en exemple dans le cours des expressions régulières


Que veut dire la première parenthèse:
- le "?" en début de parenthèse je ne sais pas ce qu'il fait comme action dans cette position. (sachant que dans le cours "?" est une répétition qui veut dire 0 ou 1 fois la lettre, le chiffre ou le caractères)
- le "<" qui suit juste après (je ne l'ai pas vu dans le cours des expressions régulières)
- le "!www" qui suit je ne sais pas du tous ce que ça veut dire ( j'ai pas vu d'explication dans le cours)

Que veut dire la deuxième parenthèses:
- il y a un \w+ qui indique un mot à ma connaissance et ensuite je ne comprend plus rien.
- pour un "-" et "?" dans cet position côte à côte, quel est la signification.

Sinon pour tout le reste du code c'est compréhensible, car je l'ai vu dans le cours.

Quelqu'un peut m'aider SVP.

Merci d'avance.

Code : PHP
1
#(((https?|ftp)://(w{3}\.)?)(?<!www)(\w+-?)*\.([a-z]{2-4}))#
Hors ligne Supermario58 # Posté le 05/01/2011 à 15:41:24
Etre dévelope-peur ! è_é
Avatar
Flux RSS

C'est tout simplement un super tuto qui nous en apprend beaucoup plus, et qui, en plus, n'est pas compliqué à comprendre grâce à M@théo !

Mes compétences : (X)HTML/HTML5/CSS, PHP/SQL, Javascript.

C'est mon pitit site créé grâce à ce site ! :D

Ne sous estimez pas la puissance des ténèbres et de l'électricité !
Image utilisateur
 
Hors ligne dospass # Posté le 14/01/2011 à 20:43:21

Avis : Très bon

Chapeau pour ce tuto !
Un gros morceau, pas facile et tu as réussi à le rendre très accessible.
Hors ligne Nogardryu # Posté le 06/02/2011 à 00:26:17
Avatar
Flux RSS

Ville : Magny-les-hameaux
Pays : France métropolitaine

Bonjour,

j'apprends petit à petit le php et les expressions régulières et j'avais une question concernant ces dernières.

Pour la regex concernant le contrôle des adresses mails, j'ai fait une autre proposition car je le trouvais incomplète. En effet, si avec ton script de test je tape une adresse qui comment par un point(.) un underscore (_) ou un tiret(-), ce qui est impossible si je ne m'abuse, ça passe. Pour pallier à ça, j'ai ajouté une classe [a-z0-9], ce qui donne :
#^[a-z0-9]+[a-z0-9_.-]+@[a-z0-9]+[a-z0-9_.-]+\.[a-z]{2,4}$#

Est-ce que c'est bon ? et surtout utile ?

Image utilisateur
Longue vie au site du zéro !

Intégrateur support débutant
Image utilisateur Je suis un bon zéro, je ferme mes sujets résolus grâce à l'icône Image utilisateur
 
Hors ligne boy432 # Posté le 20/02/2011 à 02:50:58

Ville : Paris
Pays : France métropolitaine

100ème commentaire :D

Pour dire que c'est génial ton tuto merci mateo21 :D

xHTML |||||||||| 100%
CSS |||||||||| 100%


PHP |||||||||| 100%
SQL |||||||||| 100%
 
Hors ligne skyzozo # Posté le 01/04/2011 à 20:40:53

Bonsoir,
Je souhaite intégrer l'expression pour la validité du téléphone, mais... ça ne marche pas.Certainement du au faite que c'est "!eregi" en début; Mais je ne trouve pas le moyen de le transformer. Voici mon code:Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
elseif (!eregi(" #[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#",$_POST["email"])){ // On v&eacute;rifie si l'email est bien de la forme messagerie@domaine.tld 
     $erreur="Votre adresse e-mail n'est pas valide";
     }
	 elseif (empty($_POST["telephone"])) { // L'utilisateur n'a pas rempli le champ prenom
     $erreur="Veuillez saisir votre numéro de téléphone";
     }
    elseif (empty($_POST["message"])) { // L'utilsateur n'a écrit aucun message
     $erreur="Veuillez saisir votre message";
     }
     
     else { // Si tous les champs sont valides, on change l'état à ok
     $etat="ok";
     }
     }
     else { // Sinon le formulaire n'a pas été soumis
     $etat="attente"; // On passe donc dans l'état attente
     }

Merci d'avance.
Hors ligne Hor@ce # Posté le 02/04/2011 à 10:51:20
Avatar

Avis : Très bon

Très bien expliqué !

Le plus dur ce n'est pas la programmation,
mais bien d'installer les différents logiciels requis.
 
Hors ligne Gilux # Posté le 20/04/2011 à 23:49:59

Avis : Très bon

Salut,

Attention, maintenant il existe des extensions à 6 caractères (.travel par exemple), et il ne faut pas oublier les extensions spéciales comme .fr.nf et autres du même genre ^^
Vraiment bien expliqué en tout cas, et très utile, bravo !
++

Image utilisateur
Image utilisateur

 
Hors ligne yarflam # Posté le 20/05/2011 à 01:58:57
Q=exist else !exist
Avatar

C'est super cool ton chinois !!! ;)

J'ai réussis à faire ça :
$pattern :
#(<a href=")((http://)*[a-z0-9&?=._/-]+)"(.*)(>(.+)</a>)#

$replacement :
<a href="$2">$6</a>

C'est pratique pour supprimer les composants inutiles.
Et traiter $2 ... mon but !

Merci beaucoup !

Yarflam - La science des rêves est l'ouverture d'un monde nouveau ! -
 
Hors ligne Akano # Posté le 23/05/2011 à 23:48:42
Avatar

Avis : Très bon

Ville : Beaucaire
Pays : France métropolitaine
Études : IUT de Provence, site d'Arles

Il faudrait voir à modifier la regex limitant l'extension du domaine de 4 à 6 caractères, car il existe des domaines à 6 lettres ! "travel.travel", "canada.travel", etc..., par exemple ^^

mais cours très complet, merci beaucoup ;)

Image utilisateur
 
Hors ligne aurelien3030 # Posté le 03/06/2011 à 21:23:00
Je vais mettre une bombe !
Avatar

Pour les smiley :

Code : PHP
1
$texte = preg_replace('#\[tete\]#isU', '<img src="tete.bmp" />', $texte);

Allez sur ce site super.
:magicien: :magicien: :magicien: :magicien: :magicien:
 
Hors ligne k3nz0 # Posté le 07/06/2011 à 02:18:12

Voici la regex proposé dans le tutoriel qui regarde si l'adresse mail correspond à une adresse valide ou pas :
#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#
Alors, je viens signaler un petit truc ...
après le @ nous avons le nom de domaine du site (qui peut être hotmail, yahoo ... ou le nom de domaine du propriétaire du site ... ) Or comme vous le savez il est impossible de créer un nom de domaine comportant des underscores. Donc ici [a-z0-9._-]{2,}, le "_" est inutile [a-z0-9.-]{2,} ...
La regex finale que je propose :
#^[a-z0-9._-]+@[a-z0-9.-]{2,}\.[a-z]{2,4}$#

k3nz0x3a
-- For security reasons, I do not exist --
-- Pour des raisons de sécurité, je n'existe pas --
 
Hors ligne chooky # Posté le 21/06/2011 à 20:01:08

Avis : Très bon

Après m'avoir introduit, formé et façonné au PHP il y a maintenant 7 ans. C'est encore toi Mathéo qui m'a enfin fait franchir le pas des regex sur lesquelles j'ai toujours fait un blocage.
Je te remercie pour la clarté, le côté ludique et la qualité de tes tutoriels. Tu es sincèrement très grand.
Bonne chance à toi et merci pour tout ce que tu peux apporter. Originaire d'Avignon et résidant dans les antilles depuis 11 ans, ce serait une joie que de te payer une mousse durant mon retour dans la région pour les vacances d'été.
Hors ligne GTK # Posté le 03/11/2011 à 13:03:16
Assembleur de Pixel
Avatar
Flux RSS

Bonjour ! Excellent tuto !
Cependant, j'ai deux questions :

- Premièrement, comme Orquato, je n'ai pas bien compris l'exemple... Je pensais avoir compris la deuxième parenthèse que cite Orquato mais j'ai un doute maintenant...

- Ensuite, dans le second chapitre, tu parles des cas de classe. Tu cites la #, le ] et le - comme des exceptions, mais tu ne parles pas de ^. Se caractère n'a pas de besoin de \ s'il ne se trouve pas au tout début de l'accolade ?
 
Hors ligne candide # Posté le 09/12/2011 à 23:24:49
"In C ode we trust"
Avatar

Très bon tuto et certainement très précieux pour ceux qui découvrent les regexp, en particulier les explications pas à pas de construction de regexp.

Bien que ce ne soit probablement pas utile, le tuto pourrait être approfondi en parlant par exemple de l'avididité des quantificateurs, des lookahead et lookbehind (en français, les motifs prospectifs et rétrospectifs), de l'algorithme de traitement (rétrogradation, backtracking), l'ancrage \b, etc.

Cela manque aussi de références (livres en français ou en anglais, des outils de capture de regexp en ligne ou à installer, des pointeurs vers des sites, par exemple la documentation en ligne de php sur les regexp qui semble bien faite).


Je n'ai pas vu d'erreurs ; j'ai trouvé curieux que l'on parle à deux reprises de \n comme les Entrées (qui fait penser à entrées/sorties alors qu'il ne s'agit que d'un saut de ligne). Au passage, \n n'est pas une classe abrégée, de même que le point (cf. le tableau dans le § Les classes abrégées). Il me semble incorrect de dire que l'on doive impérativement échapper un crochet fermant dans une classe de caractères (il suffit de la placer au début de la classe, essayer ICI)

  • Make it work, Make it well, Make it fast, Make it short, Make it fun
  • Comment insérer les balises de code dans un message ? : Screencast ou Texte
  • Le rasoir d'Occam : Entities should not be multiplied beyond necessity.
  • KISS !
  • Le gâteau sous la cerise.
  • (Lien vers fichier pdf) La norme du langage C 99
  • scanf et printf : les colifichets de la programmation bling bling

 
Hors ligne phdphd # Posté le 13/12/2011 à 12:30:08

Une petite suggestion de mise à jour concernant la partie qui traite des regex de remplacement : utiliser "paire de parenthèses". Exemple :


Il faut bien garder en tête que chaque parenthèse va créer une variable ($1, $2 etc...) >>> il faut bien garder en tête que chaque paire de parenthèses va créer une variable ($1, $2 etc...)


#(anti)co(nsti)(tu(tion)nelle)ment#
Il y a 4 parenthèses dans cette regex (donc $1, $2, $3 et $4). La parenthèse numéro 3 ($3) contient "tutionnelle", et la parenthèse $4 contient "tion" >>> #(anti)co(nsti)(tu(tion)nelle)ment#
Il y a 4 paire de parenthèses dans cette regex (donc $1, $2, $3 et $4). La paire de parenthèses numéro 3 ($3) contient "tutionnelle", et la paire de parenthèses $4 contient "tion"
Hors ligne pititjules45 # Posté le 10/02/2012 à 11:23:14
Avatar

Excellent tuto, par contre tu parle de "nl2br" vers la fin et je ne me souviens pas d'avoir vu ceci avant.

Webmaster débutant:
-Html5 / CSS
-PHP/ MySQL
-Javascript

 
Hors ligne lenewstunt # Posté le 12/02/2012 à 15:55:12

Bonjour merci d'abord pour le tuto car les regexp c'est asser dur a comprendre

Je veux faire un tokenizer en php qui par exemple transforme "6+55x556+7"

en un array de {6, '+', 55, 'x',556, '+', 7}

ma regexp est donc :
#^[0-9]+([+x][0-9]+)*$#

elle matche bien avec preg_match

par contre avec preg_split elle me renvoi un array {0, 0}

Pourquoi?
Que dois je corriger pour avoir le résultat voulut?
Hors ligne petremann yoann # Posté le 22/03/2012 à 16:28:23

L'autre jour j'ai découvert quelque chose d'extraordinaire, les références arrières.php.net
Le principe est simple, dans certaines regex on utilises des élément répété comme par exemple pour du BBcode, les références arrières vont simplement reprendre le résultat d'une référence ( comme pour les remplacement )pour la "recopier".
On l'ecrit \x ou x est le numero de la référence
par exemple :
#une (pomme|banane), des \1s#

Chaine Résultat
une pomme, des pommes Vrai
une banane, des bananes Vrai
une pomme, des bananes Faux

un exemple pour le bbcode :
Code : PHP
1
preg_replace('#\[(h[1-9])\](.*)\[/\1\]#isU', '<$1>$2</$1>', $texte)

Ce code va pouvoir tester si on a mis h1, h2 ou h9, mais se cloturera avec la bonne balise.
Chaine Résultat Pourquoi
[h1]Titre[h1] <h1>Titre</h1>
( no comment )
[H2]Titre[H2] <H2>Titre</H2>
( no comment )
[h1]Titre[h2] [h1]Titre[h2] "h2" diferent de "h1", donc aucun remplacement
[h1]Titre[H1] [h1]Titre[H1] "H1" diferent de "h1", donc aucun remplacement
Hors ligne AlexeiEPF # Posté le 22/04/2012 à 21:50:31

Avis : Très bon

Très bon tuto !
Hors ligne davidanou # Posté le 28/04/2012 à 18:32:34
On a qu'une vie
Avatar

Avis : Très bon
Flux RSS

Juste merci et bon vent.

David Thomas
http://www.smol.org
 
Hors ligne gilbert1995 # Posté le 15/05/2012 à 05:25:25

Cool merci
Pour accéder à cette section
Connectez-vous !
connexion_rpx