8 expressions régulières à connaître

Les expressions régulières sont leur propre langage. Lorsque vous apprenez un nouveau langage de programmation, ce sont ces petits sous-langages qui n'ont aucun sens à première vue. Plusieurs fois, vous devez lire un autre tutoriel, article ou livre simplement pour comprendre le modèle "simple" décrit. Aujourd'hui, nous allons passer en revue huit expressions régulières que vous devriez connaître pour votre prochain projet de codage..

Avant de commencer, vous voudrez peut-être consulter certaines des applications regex sur Envato Market, telles que:

Extracteur RegEx

Vous pouvez extraire des courriels, des mandataires, des adresses IP, des numéros de téléphone, des adresses, des balises HTML, des URL, des liens, des dates, etc. Insérez simplement une ou plusieurs expressions régulières et URL de sources, puis démarrez le processus..

Extraire, gratter, analyser, récolter.

Exemples d'utilisation

  • Extraire des emails d'un ancien carnet d'adresses CSV.
  • Extraire des sources d'images à partir de fichiers HTML.
  • Extraire des procurations à partir de sites Web en ligne.
  • Extraire les résultats d'URL de Google.

Testeur d'expressions régulières PHP

  1. Testeur de regex rapide
  2. Basé sur AJAX
  3. jQuery etc ne sont pas nécessaires.
  4. Aucune base de données requise
  5. Annonce prête

MyRegExp

Cet élément est un générateur PHP RegEx, qui vous aide à créer des expressions régulières dans une syntaxe PHP extensible. Vous pouvez:

  1. Construisez des expressions régulières avec une syntaxe PHP simple
  2. Valider des chaînes avec le RegEx construit
  3. Construire RegEx et les obtenir
  4. Appliquer preg_match à un RegEx
  5. Remplacer une chaîne par le RegEx construit

Tout cela dans une syntaxe PHP. Finis les têtes cassées qui essaient de créer des RegEx simples ou complexes!


Informations de base sur les expressions régulières

Voici ce que Wikipedia dit à leur sujet:

En informatique, les expressions régulières constituent un moyen concis et flexible d’identification de chaînes de texte présentant un intérêt, telles que des caractères, des mots ou des modèles de caractères particuliers. Les expressions régulières (abrégées en regex ou regexp, avec des formes plurielles, regexes, regexps ou regexen) sont écrites dans un langage formel pouvant être interprété par un processeur d’expression régulière, un programme servant de générateur d’analyseur ou examinant le texte et identifiant des parties. qui correspondent à la spécification fournie.

Cela ne me dit pas grand-chose sur les tendances actuelles. Les expressions rationnelles que je vais aborder aujourd'hui contiennent des caractères tels que \ w, \ s, \ 1 et beaucoup d'autres qui représentent quelque chose de totalement différent de ce à quoi ils ressemblent.

Si vous souhaitez en savoir un peu plus sur les expressions régulières avant de continuer à lire cet article, je vous suggère de regarder la série de captures d’écran Expressions régulières pour les nuls.

Les huit expressions régulières que nous allons aborder aujourd'hui vous permettront de faire correspondre un (n): nom d'utilisateur, mot de passe, email, valeur hexadécimale (comme #fff ou # 000), slug, URL, adresse IP et une balise HTML. Au fur et à mesure que la liste diminue, les expressions régulières deviennent de plus en plus confuses. Les images pour chaque regex au début sont faciles à suivre, mais les quatre dernières sont plus faciles à comprendre en lisant l'explication.

L'essentiel à retenir sur les expressions régulières est qu'elles sont presque lues en avant et en arrière en même temps. Cette phrase aura plus de sens quand on parlera de balises HTML correspondantes.

Remarque: Les délimiteurs utilisés dans les expressions régulières sont des barres obliques, "/". Chaque motif commence et se termine par un délimiteur. Si une barre oblique apparaît dans une expression rationnelle, vous devez l'échapper avec une barre oblique inverse: "\ /".


1. Faire correspondre un nom d'utilisateur

Modèle:

/ ^ [a-z0-9 _-] 3,16 $ /

La description:

Nous commençons par dire à l'analyseur de rechercher le début de la chaîne (^), suivi de toute lettre minuscule (a-z), de tout chiffre (0 à 9), d'un trait de soulignement ou d'un trait d'union. Ensuite, 3,16 s'assure qu'il y a au moins 3 de ces caractères, mais pas plus de 16. Enfin, nous voulons la fin de la chaîne ($).

Chaîne qui correspond à:

my-us3r_n4m3

Chaîne qui ne correspond pas:

th1s1s-wayt00_l0ngt0beausername (trop long)


2. Faire correspondre un mot de passe

Modèle:

/ ^ [a-z0-9 _-] 6,18 $ /

La description:

Faire correspondre un mot de passe est très similaire à faire correspondre un nom d'utilisateur. La seule différence est qu'au lieu de 3 à 16 lettres, chiffres, traits de soulignement ou traits d'union, nous en voulons 6 à 18 (6,18)..

Chaîne qui correspond à:

myp4ssw0rd

Chaîne qui ne correspond pas:

mypa $$ w0rd (contient un signe dollar)


3. Faire correspondre une valeur hexadécimale

Modèle:

/ ^ #? ([a-f0-9] 6 | [a-f0-9] 3) $ /

La description:

Nous commençons par dire à l'analyseur de trouver le début de la chaîne (^). Ensuite, un signe numérique est facultatif car il est suivi d'un point d'interrogation. Le point d'interrogation indique à l'analyseur que le caractère précédent - dans ce cas un signe dièse - est facultatif, mais qu'il faut être "glouton" et le capturer s'il est là. Ensuite, dans le premier groupe (premier groupe de parenthèses), nous pouvons avoir deux situations différentes. Le premier est une lettre minuscule comprise entre a et f ou un nombre six fois. La barre verticale nous indique que nous pouvons également avoir trois lettres minuscules entre a et f ou un nombre. Enfin, nous voulons la fin de la chaîne ($).

La raison pour laquelle j'ai mis les six caractères avant est que l'analyseur capture une valeur hexadécimale telle que #ffffff. Si je l'avais inversé pour que les trois caractères arrivent en premier, l'analyseur ne capterait que #fff et pas les trois autres f.

Chaîne qui correspond à:

# a3c113

Chaîne qui ne correspond pas:

# 4d82h4 (contient la lettre h)


4. Faire correspondre une limace

Modèle:

/ ^ [a-z0-9 -] + $ /

La description:

Vous utiliserez cette expression régulière si vous devez travailler avec mod_rewrite et de jolies URL. Nous commençons par dire à l'analyseur de rechercher le début de la chaîne (^), suivi d'un ou de plusieurs caractères (le signe plus), de chiffres ou de traits d'union. Enfin, nous voulons la fin de la chaîne ($).

Chaîne qui correspond à:

mon-titre-ici

Chaîne qui ne correspond pas:

my_title_here (contient des traits de soulignement)


5. Faire correspondre un email

Modèle:

/^([a-z0-9_\.-]+)@([\da-z\.-unset+ )\.([a-z\.hnen2,6)$/

La description:

Nous commençons par dire à l'analyseur de trouver le début de la chaîne (^). Dans le premier groupe, nous associons une ou plusieurs lettres minuscules, chiffres, traits de soulignement, points ou traits d'union. J'ai échappé au point parce qu'un point non échappé signifie n'importe quel caractère. Juste après cela, il doit y avoir un signe d’arrière. Vient ensuite le nom de domaine qui doit être: une ou plusieurs lettres minuscules, des chiffres, des traits de soulignement, des points ou des traits d'union. Puis un autre point (échappé), l’extension étant de deux à six lettres ou points. J'ai 2 à 6 à cause des TLD spécifiques au pays (.ny.us ou .co.uk). Enfin, nous voulons la fin de la chaîne ($).

Chaîne qui correspond à:

[email protected]

Chaîne qui ne correspond pas:

[email protected] (le TLD est trop long)


6. Faire correspondre une URL

Modèle:

/^(https?:\/\/)?([\da-z\---++\\\\\\\\\\\\\\\\\\\\\\ '] *) * \ /? $ /

La description:

Cette expression rationnelle revient presque à prendre la dernière partie de l'expression ci-dessus, en la claquant entre "http: //" et une structure de fichier à la fin. Cela semble beaucoup plus simple que ce n'est vraiment. Pour commencer, nous recherchons le début de la ligne avec le caret.

Le premier groupe de capture est tout option. Cela permet à l'URL de commencer par "http: //", "https: //" ou aucun des deux. J'ai un point d'interrogation après le s pour autoriser les URL ayant http ou https. Afin de rendre ce groupe entier facultatif, je viens d'ajouter un point d'interrogation à la fin de celui-ci..

Vient ensuite le nom de domaine: un ou plusieurs chiffres, lettres, points ou caractères suivis d'un autre point, puis de deux à six lettres ou points. La section suivante concerne les fichiers et répertoires facultatifs. Au sein du groupe, nous voulons faire correspondre un nombre quelconque de barres obliques, de lettres, de chiffres, de traits de soulignement, d'espaces, de points ou de traits d'union. Ensuite, nous disons que ce groupe peut être jumelé autant de fois que nous le voulons. Cela permet de faire correspondre plusieurs répertoires avec un fichier à la fin. J'ai utilisé l'étoile au lieu du point d'interrogation car l'étoile dit zéro ou plus, pas zéro ou une. Si un point d'interrogation devait être utilisé à cet endroit, un seul fichier / répertoire pourrait être mis en correspondance..

Ensuite, une barre oblique finale est appariée, mais elle peut être facultative. Enfin nous terminons avec la fin de la ligne.

Chaîne qui correspond à:

http://net.tutsplus.com/about

Chaîne qui ne correspond pas:

http://google.com/some/file!.html (contient un point d'exclamation)


7. Faire correspondre une adresse IP

Modèle:

/ ^ (? :( ?: 25 [0-5] | 2 [0-4] [0-9] | [01]? [0-9] [0-9]?) \.) 3 ( ?: 25 [0-5] | 2 [0-4] [0-9] | [01]? [0-9] [0-9]?) $ /

La description:

Maintenant, je ne vais pas mentir, je n'ai pas écrit cette regex; Je l'ai eu d'ici. Maintenant, cela ne signifie pas que je ne peux pas déchirer le caractère pour le caractère.

Le premier groupe de capture n'est pas vraiment un groupe capturé parce que

?:

a été placé à l'intérieur, ce qui indique à l'analyseur syntaxique de ne pas capturer ce groupe (plus d'informations à ce sujet dans la dernière expression régulière). Nous souhaitons également que ce groupe non capturé soit répété trois fois - le 3 à la fin du groupe. Ce groupe contient un autre groupe, un sous-groupe et un point littéral. L'analyseur cherche une correspondance dans le sous-groupe puis un point pour passer à autre chose.

Le sous-groupe est également un autre groupe non capturé. C'est juste un tas de jeux de caractères (choses entre parenthèses): la chaîne "25" suivie d'un nombre entre 0 et 5; ou la chaîne "2" et un nombre compris entre 0 et 4 et un nombre quelconque; ou un zéro ou un facultatif suivi de deux chiffres, le second étant facultatif.

Une fois que nous en avons assorti trois, nous en arrivons au prochain groupe sans capture. Celui-ci veut: la chaîne "25" suivie d'un nombre compris entre 0 et 5; ou la chaîne "2" avec un nombre compris entre 0 et 4 et un autre nombre à la fin; ou un zéro ou un facultatif suivi de deux chiffres, le second étant facultatif.

Nous terminons cette expression rationnelle source de confusion avec la fin de la chaîne.

Chaîne qui correspond à:

73.60.124.136 (non, ce n'est pas mon adresse IP: P)

Chaîne qui ne correspond pas:

256.60.124.136 (le premier groupe doit être "25" et un nombre compris entre zéro et cinq)


8. Faire correspondre une balise HTML

Modèle:

/ ^<([a-z]+)([^<]+)*(?:>(. *)<\/\1>| \ s + \ />) $ /

La description:

Une des expressions rationnelles les plus utiles de la liste. Cela correspond à n'importe quelle balise HTML avec le contenu qu'il contient. Comme d'habitude, on commence par le début de la ligne.

Tout d'abord vient le nom de la balise. Ce doit être une ou plusieurs lettres. Ceci est le premier groupe de capture, il est pratique lorsque nous devons saisir la balise de fermeture. La prochaine chose sont les attributs de la balise. C'est n'importe quel caractère mais un signe supérieur à (>). Étant donné que cela est facultatif et que je souhaite faire correspondre plusieurs caractères, l'étoile est utilisée. Le signe plus constitue l'attribut et la valeur, et l'étoile dit autant d'attributs que vous le souhaitez..

Vient ensuite le troisième groupe non capturé. À l'intérieur, il contiendra soit un signe supérieur à, du contenu et une balise de fermeture; ou des espaces, une barre oblique et un signe supérieur à. La première option recherche un signe supérieur à, suivi d'un nombre quelconque de caractères et de la balise de fermeture. \ 1 est utilisé pour représenter le contenu capturé dans le premier groupe de capture. Dans ce cas, c'était le nom de la balise. Maintenant, si cela ne correspond pas, nous voulons rechercher une balise à fermeture automatique (comme une balise img, br ou hr). Cela doit avoir un ou plusieurs espaces suivis de "/>".

La regex se termine par la fin de la ligne.

Chaîne qui correspond à:

Nettuts "> http://net.tutsplus.com/"> Nettuts+

Chaîne qui ne correspond pas:

My image> (les attributs ne peuvent pas contenir plus que des signes)


Conclusion

J'espère que vous avez un peu mieux compris les idées qui se cachent derrière les expressions régulières. J'espère que vous utiliserez ces regex dans vos projets futurs! Bien souvent, vous n'aurez pas besoin de déchiffrer une expression régulière caractère par caractère, mais cela vous aide parfois à apprendre. Rappelez-vous, n’ayez pas peur des expressions régulières, elles ne le semblent peut-être pas, mais elles vous facilitent la vie. Essayez juste d'extraire le nom d'une balise d'une chaîne sans expressions régulières!

Suivez-nous sur Twitter ou abonnez-vous au fil RSS NETTUTS pour consulter plus d'articles et de tutoriels quotidiens sur le développement Web. Et consultez certaines de ces applications regex sur Envato Market.