La plupart des programmeurs ont un angle mort. Ils débogueront volontiers un système distribué ou se débattront avec un nouveau framework, pourtant ils passeront vingt minutes à effectuer une modification de texte manuelle qui devrait prendre dix secondes. La raison est toujours la même : les expressions régulières ressemblent à du bruit de ligne. Un motif typique est un mur de slashs, de backslashs et de ponctuation qui semble avoir été transmis par un modem des années 1990. Ce chaos visuel détourne des personnes compétentes d'une compétence véritablement précieuse.
La bonne nouvelle, c'est que les regex ne sont pas difficiles. Elles sont denses. Les symboles condensent une quantité énorme de sens dans un espace restreint, de sorte que votre œil lit du hasard là où il s'agit en réalité d'une description très précise. Une fois que vous avez le bon modèle mental, vous arrêtez d'essayer de décoder les symboles un par un pour plutôt lire la forme qu'ils décrivent. Quand vous faites cela, le bruit disparaît complètement.
Un motif, pas un programme
Le changement fondamental consiste à comprendre ce qu'est réellement une expression régulière. La plupart du code que vous écrivez est procédural : faites ceci, puis faites cela, vérifiez cette condition, bouclez à nouveau. Une regex n'est pas une procédure. C'est un motif statique qui décrit l'apparence attendue d'un texte. Vous n'écrivez pas d'instructions sur la manière de chercher ; vous remettez un croquis au moteur de correspondance et vous le laissez faire le reste.
Voyez cela comme la description de formes en langage clair :
- Un nombre à cinq chiffres.
- Une adresse e-mail.
- Une ligne qui commence par une lettre majuscule.
C'est tout ce que fait une regex, à la différence qu'elle utilise un alphabet compressé. Quand vous voyez \d{5}, ce n'est pas de la magie. Vous voyez « un chiffre, cinq fois ». Quand vous voyez ^[A-Z], vous voyez « début de ligne, suivi d'une lettre majuscule ». La compétence ne réside pas dans la mémorisation. Il s'agit d'apprendre à jeter un coup d'œil au motif et à le traduire à nouveau en cette description en langage clair. Une fois que vous maîtrisez cette traduction, le sentiment d'intimidation disparaît.
Où part réellement le temps
Les gens ont tendance à apprendre les regex seulement après avoir suffisamment souffert. Une meilleure approche consiste à identifier les tâches qui appellent un motif avant de gaspiller un après-midi dessus.
Si vous devez trouver toutes les dates dans un document de deux cents pages, une regex les localisera en un seul passage. Si vous devez valider si un utilisateur a saisi une URL valide avant que votre application ne l'accepte, un motif peut imposer la forme de base de l'adresse. Si vous nettoyez du texte copié d'un site web et que vous devez transformer plusieurs espaces en un seul, une regex de remplacement ne nécessite que quatre caractères. Si vous extrayez des données de journaux de serveurs (logs) désordonnés, les regex sont souvent le seul pont raisonnable entre un texte non structuré et un rapport structuré.
Voici une règle simple à adopter : si vous êtes sur le point d'effectuer cinquante fois la même modification de texte à la main, arrêtez-vous. Écrivez plutôt un motif. La répétition manuelle n'est pas seulement lente ; elle est peu fiable. Vous manquerez la quarante-septième occurrence ou introduirez une faute de frappe à la trente-troisième. Un motif fait le travail une seule fois, correctement, et il documente la règle que vous appliquiez au départ.
Une boucle d'apprentissage efficace
N'essayez pas de taper des motifs parfaits de mémoire. C'est ainsi que la frustration s'installe. Au lieu de cela, suivez une boucle serrée qui vous permet d'avancer sans vous perdre dans la syntaxe.
- Décrivez la forme avec des mots. Avant de toucher à un caractère spécial, écrivez exactement ce que vous voulez. « Quatre chiffres, suivis d'un tiret, suivis de deux chiffres, suivis d'un tiret, suivis de deux chiffres. » Si vous ne pouvez pas l'énoncer clairement, vous ne pourrez pas en faire un motif.
- Générez un premier jet. Transformez votre description en un motif de base en utilisant les symboles les plus larges possibles. Ne vous souciez pas de la perfection. Vous construisez un prototype,
