Les expressions régulières/regex
-
<p>Bonjour à tous,</p><p>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.</p><p></p><p>Qu'est-ce que veux dire regex d'abord? tout simplement "<strong>REG</strong>ular <strong>EXpression</strong>" 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><p></p><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é ._.</p><p></p><p>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).</p><p></p><p>Vous allons constituer le regex à l'aide de divers symbole:</p><p>- () : groupement, utilisé pour récupération de la donnée le plus souvent</p><p>Exemple: pas d'idée sans spoil la suite</p><p>- [] : groupe de caractères possible</p><p>Exemple: les caractères possibles sont a, b et/ou c : [abc]</p><p>- [^] : Tout les caractères sauf...</p><p>Exemple: ne peut pas commencer par un 0: ^[^0]</p><p>- ^ : l'expression commence par ...</p><p>Exemple: ligne qui commence par "meli": ^meli</p><p>- $ : l'expression termine par ...</p><p>Exemple: ligne qui termine par "es": es$</p><p>- - : tout les caractères compris entre</p><p>Exemple: Tout les caractères de a à z: [a-z]</p><p>- {} : répétition du caractère</p><p>Exemple: Il faut entre 2 et 5 caractère de a à z: [a-z]{2,5}</p><p>- * : répétition du nombre du caractère entre 0 à l'infini</p><p>Exemple: les caractères a, b et c peuvent être présent: [abc]*</p><p>- + : répétition au moins une fois</p><p>Exemple: les caractères a, b ou c doit être présent au mains une fois: [abc]+</p><p>- . : n'importe quel caractère</p><p>Exemple: n'importe quel caractère qui doit-être entre d et b: d.b</p><p>- ? : le caractère avant est optionnel</p><p>Exemple: le s à la fin de patates n'est pas obligatoire: patates?</p><p>- \ : quand vous voulez utiliser un caractère qui est un symbole de regex pour le "désactiver"</p><p>Exemple: n'importe quel caractère au moins répété au moins une fois entre des parenthèses: (.+)</p><p>- (|) : différente possibilité possible</p><p>Exemple: différentes terminaison possible mais ça commence par meli: ^meli(chat|shout|télécommunicateur)</p><p></p><p>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):</p><p>en php on met un # puis des paramètres dont "i" dans ce cas:</p><p></p><div></div><pre class="ipsCode">(exemple|example)#i</pre><p></p><p>dans un htaccess c'est au début toujours avec un "i"</p><p></p><pre class="ipsCode prettyprint">(?i)(exemple|example)
</pre>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:<p>-premier contexte un système d'inscription:</p><p></p><pre class="ipsCode prettyprint lang-auto"># 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
</pre>- deuxième dans un htaccess je "capte" le chiffe entré dans dans l'url (qui servira par la suite à générer une image:<p></p><pre class="ipsCode prettyprint lang-auto"># 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$
</pre>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<p></p><p>il existe encore quelques trucs:</p><p>- \d : remplace [0-9] c'est le d pour <u>d</u>écimal mais je ne sais plus si ça prend les points en compte (normalement non)</p><p>- \n : nouvelle ligne</p><p>en php:</p><p>- [[: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 ._.</p><p></p><p>je pense avoir tout globalement tout dit, si vous avez besoin aide vous n'avez cas répondre au sujet
</p><p></p><p>Site assez sympa: <a href="http://www.expreg.com/" rel="external nofollow">expreg.com</a></p> -
<p>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>
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login
<br/>