Aller au contenu

Les expressions régulières/regex


mars073
 Share

Recommended Posts

Bonjour à tous,

Vu que j'ai remarqué que dans mes derniers tuto j'utilisais pas mal de regex j'ai décidé d'en faire un topic plus approfondit.

Qu'est-ce que veux dire regex d'abord? tout simplement "REGular EXpression" ou "Expression régulière" (expreg) en français si vous n'avez pas compris. Et si vous ne savez pas ce que c'est une expression régulière cela explique le fait que vous lissez ce topic :P

Bref en d'autres termes une expression régulière, aussi appelé "motif de recherche", est la structure que l'on donne à une chaîne de caractère et qui est beaucoup utilisé en programmation (exemple: vérifier lors qu'une inscription la structure d'un email) enfin je ne vois pas d'autres domaines où cela pourrait-être utilisé ._.

Petite notion à savoir: un caractère en majuscule n'est pas le même en minuscule (a=/=A), un espace est aussi un caractère, un caractère peut-être inexistant(NULL) selon le contexte de l'utilisation il peut donc être représenté par un espace ou ne pas être mit, les caractères alphanumériques sont les caractères de base de a à z et de 0 à 9 (majuscule et minuscules inclussent).

Vous allons constituer le regex à l'aide de divers symbole:

- () : groupement, utilisé pour récupération de la donnée le plus souvent

Exemple: pas d'idée sans spoil la suite

- [] : groupe de caractères possible

Exemple: les caractères possibles sont a, b et/ou c : [abc]

- [^] : Tout les caractères sauf...

Exemple: ne peut pas commencer par un 0: ^[^0]

- ^ : l'expression commence par ...

Exemple: ligne qui commence par "meli": ^meli

- $ : l'expression termine par ...

Exemple: ligne qui termine par "es": es$

- - : tout les caractères compris entre

Exemple: Tout les caractères de a à z: [a-z]

- {} : répétition du caractère

Exemple: Il faut entre 2 et 5 caractère de a à z: [a-z]{2,5}

- * : répétition du nombre du caractère entre 0 à l'infini

Exemple: les caractères a, b et c peuvent être présent: [abc]*

- + : répétition au moins une fois

Exemple: les caractères a, b ou c doit être présent au mains une fois: [abc]+

- . : n'importe quel caractère

Exemple: n'importe quel caractère qui doit-être entre d et b: d.b

- ? : le caractère avant est optionnel

Exemple: le s à la fin de patates n'est pas obligatoire: patates?

- \ : quand vous voulez utiliser un caractère qui est un symbole de regex pour le "désactiver"

Exemple: n'importe quel caractère au moins répété au moins une fois entre des parenthèses: \(.+\)

- (|) : différente possibilité possible

Exemple: différentes terminaison possible mais ça commence par meli: ^meli(chat|shout|télécommunicateur)

Bon après il y a les variantes en programmation pour exemple pour rendre insensible à la cas (ne pas faire la différence entre la majuscule et minuscule):

en php on met un # puis des paramètres dont "i" dans ce cas:

(exemple|example)#i

dans un htaccess c'est au début toujours avec un "i"

(?i)(exemple|example)
Je vais encore vous donner quelques exemples pour essayer de mieux vous faire synthétiser, on va travailler en contexte car j'ai faire des contextes:

-premier contexte un système d'inscription:

# vérification que le nom d'utilisateur ne contient que des caractères alphanumérique minimum un caractère:
^[a-zA-Z0-9]+$
# vérification d'une adresse email: 
^[a-zA-Z0-9.]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,5}$
# d'après la norme RFC machin le regex correct est extrêmement long et moche
- deuxième dans un htaccess je "capte" le chiffe entré dans dans l'url (qui servira par la suite à générer une image:

# on cherche un chiffre qui est présent au moins une fois est qui peut contenir un point, le point était la virgule d'un chiffre en programmation
^image\-([0-9]+|[0-9]+\.[0-9]+)\.png$
comme vous le voyez j'ai mis plusieurs possibilités (2) qui sont séparées par une | j'ai mis un \ devant les caractères qui on une symbolique en regex, et donc si j'entre /image-073.png cela retournera 073 et si j'entre /image-0.73.png cela retournera 0.73

il existe encore quelques trucs:

- \d : remplace [0-9] c'est le d pour décimal mais je ne sais plus si ça prend les points en compte (normalement non)

- \n : nouvelle ligne

en php:

- [[:alnum:]]+ : il y en a plein de ce type que je n'ai jamais utilisé, mais je pense dans ce cas-ci ça vérifie si c'est une numérique donc la syntaxe est assez large ._.

je pense avoir tout globalement tout dit, si vous avez besoin aide vous n'avez cas répondre au sujet :P

Site assez sympa: expreg.com

Modifié par mars073
  • Upvote 3
Lien vers le commentaire
Partager sur d’autres sites

Par exemple pour le site d'une guilde j'ai fais un script qui charge la page d'un autre site où il y a un top avez plein d'information et je l'ai récupère, les reconditionnes et je l'ai réaffiche ou je génère une image avec vu qu'il chargait 5 sites en même temps et que certains sites prennent 5sec à charger je fais un cache d'un jour pour ne pas ralentir le site car pour moi le site doit être affiche en moins de 1sec même si du contenu doit encore charger derrière :P

Lien vers le commentaire
Partager sur d’autres sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Invité
Répondre à ce sujet…

×   Vous avez collé du contenu avec mise en forme.   Supprimer la mise en forme

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Chargement
 Share

×
×
  • Créer...