Pourquoi les expressions régulières sont-elles si morbides?

23

Pièce 1 , pièce 2 , je suppose que vous n'aurez pas de mal à vous souvenir d'autres exemples.

La chose est la suivante: s'il y a plus d'une façon de résoudre un problème, le programmeur PHP (je parcours généralement la balise PHP sur StackOverflow) demandera de l'aide sur la solution impliquant des expressions régulières.

Même quand cela sera moins économique, même lorsque le manuel php suggère ( lien ) d'utiliser à la str_replaceplace de any preg_*ou de ereg_*fonctionner quand aucune règle de substitution sophistiquée n'est requise.

Quelqu'un sait-il pourquoi cela se produit?

Ne vous méprenez pas, certains de mes meilleurs amis sont des expressions régulières et je ne méprise pas Perl. Ce que je ne comprends pas, c'est pourquoi il n'y a aucune recherche d'alternatives, même lorsque la surpuissance est évidente (regex pour changer de chaîne) ou que la complexité du code augmente de façon exponentielle (regex pour obtenir des données html en PHP )

cbrandolino
la source
2
Vous voudrez peut-être citer ce que dit réellement le manuel php.
ChrisF
1
Parce qu'ils sont énigmatiques, vous voulez donc faire partie du club exclusif de kewl kidz? Et surtout parce qu'ils fournissent un moyen court d'exprimer une correspondance ou une extraction, ce pour quoi ils sont faits. Bien sûr, pour les cas fictifs, l'analyse personnalisée est meilleure, mais le temps de développement par rapport à l'écriture d'une expression rationnelle rapide est en faveur de l'expression rationnelle.
haylem
Vous avez insisté sur la mauvaise partie de cette dernière phrase: la partie scandaleuse est "de html", pas "en PHP".
Izkata

Réponses:

20

Pourquoi les expressions régulières sont-elles si morbides?

Parce qu'au niveau subconscient, ils se sentent comme un programme intelligent complet qui peut accomplir beaucoup de choses de son propre chef tout en étant englobant et auto-adaptatif (schémas de réflexion).

C'est pourquoi les gens croient immédiatement que les expressions régulières résoudront n'importe quelle tâche basée sur du texte, ne pensant pas que cela pourrait être excessif et ne réalisant pas que cela pourrait me sous-estimer (analyser les langues avec).

Une toute petite chose contenant du pouvoir magique. Vous ne pouvez pas dire non, n'est-ce pas?

user8685
la source
5
+1 - Une toute petite chose cryptique , rien de moins.
AJ Johnson
Les hobits sont rusés
Ben DeMott
49

Lorsque le seul outil dont vous disposez est une expression régulière, chaque problème ressemble à ^((?>[a-zA-Z\d!#$%&'*+\-/=?^_{|}~]+\x20*|"((?=[\x01-\x7f])[^"\\]|\\[\x01-\x7f])*"\x20*)*(?<angle><))?((?!\.)(?>\.?[a-zA-Z\d!#$%&'*+\-/=?^_{|}~]+)+|"((?=[\x01-\x7f])[^"\\]|\\[\x01-\x7f])*")@(((?!-)[a-zA-Z\d\-]+(?<!-)\.)+[a-zA-Z]{2,}|\[(((?(?<!\[)\.)(25[0-5]|2[0-4]\d|[01]?\d?\d)){4}|[a-zA-Z\d\-]*[a-zA-Z\d]:((?=[\x01-\x7f])[^\\\[\]]|\\[\x01-\x7f])+)\])(?(angle)>)$

glénatron
la source
16
La tentation de choisir cette réponse est si forte, mais je suppose que je dois résister car c'est ma première question ouverte ici et je dois feindre le sérieux pendant un certain temps.
cbrandolino
1
@Dev, cela a beaucoup de sens. Mon commentaire était juste une façon supposée drôle d'exprimer ma gratitude pour la réponse.
cbrandolino
17
À quoi cela correspond-il?
Tom O'Connor
4
Je ne sais pas ... Je pense que cela résume à peu près tout. Si vous connaissez l'expression régulière et ne connaissez pas les autres méthodes, pourquoi iriez-vous chercher? Vous disposez déjà d'un outil qui, s'il est fait correctement, gérera le travail. Tant qu'ils ne tomberont pas sur la méthode la plus simple ou ne le seront pas, regex sera la méthode fourre-tout, même si elle est plus complexe que nécessaire.
Aeo
4
@ Tom O'Connor Je pense que c'est quelque chose de proche du Regex pour correspondre à une adresse e-mail RFC 2822, mais j'ai dû retirer quelques caractères car ils faisaient des ravages avec le démarque.
glenatron
23

Je pense que c'est parce que:

  1. Ils sont incroyablement concis (lorsqu'ils sont utilisés correctement) par rapport au code équivalent, et
  2. Ils sont largement pris en charge dans tous les langages de programmation, de sorte que la plupart des développeurs les connaissent.
hallidave
la source
3
# 2 est logique.
cbrandolino
23

Dans les phases précédentes de ma carrière (c'est-à-dire pré-PHP), j'étais un gourou de Perl, et un aspect majeur de Perl gurudom est la maîtrise des expressions régulières.

Dans mon équipe actuelle, je suis littéralement le seul d'entre nous à atteindre l'expression régulière avant d'autres outils (généralement plus méchants). On dirait que pour le reste de l'équipe, c'est de la pure magie. Ils se dirigeront vers mon bureau et demanderont une expression régulière qui me prendra littéralement dix secondes à assembler, puis seront époustouflés quand cela fonctionnera. Je ne sais pas - j'ai travaillé avec eux si longtemps, c'est tout simplement naturel à ce stade.

En l'absence de fluidité regex, vous vous retrouvez avec des combinaisons d'instructions de contrôle de flux enveloppant les instructions strstr et strpos, ce qui devient laid et difficile à exécuter dans votre tête. Je préfère de loin créer une regex élégante que trente lignes de recherche de chaînes.

Dan Ray
la source
2
Je ne peux pas voter assez pour cela.
CaffGeek
8
Je suis curieux: lisez- vous les expressions rationnelles aussi couramment que vous les écrivez?
peterchen
7
J'espère que vous organisez régulièrement des sessions de formation regex et / ou documentez l'enfer de votre code; sinon, vous créez un cauchemar de soutien pour vos collègues. Le temps que vous avez gagné en écrivant que l'expression régulière peut être perdu cent fois par les gens qui essaient de comprendre ce que fait cette «expression régulière élégante».
Jeff Knecht
3
Tellement bon. Vous pouvez entendre le bras de fer entre aimer et détester les expressions rationnelles ici même dans ces commentaires.
Dan Ray
1
@Ben Lee: Je suppose que oui - OTOH, je n'ai jamais rencontré de regex commentée dans la nature. Certains des problèmes avec les regex peuvent être basés sur une attitude de fraîcheur.
peterchen
16

Au contraire. Les gens parroient les regex sont trop souvent des mèmes maléfiques de l' OMI. Il est évident que preg_match est surutilisé php, mais il est moins évident qu'il est souvent judicieux de le faire (en PHP).

J'irais si loin et conjecturerais que c'est encore une autre microoptimisation en php land pour utiliser les fonctions de chaîne. Il y en a beaucoup et beaucoup utiles, et ils sont généralement le meilleur choix. Mais vous ne devriez pas fuir preg_matchen faveur de multiples strposet de ifchaînes. Parce qu'en pratique, il s'avère que libpcre est souvent plus rapide que PHP ne peut exécuter une boucle à la recherche d'alternatives de chaînes, par exemple

Comme un exemple récent m'a fait réaliser, tester si une chaîne est tout en minuscules:

 if ($string == strtolower($string))

Est plus lisible que:

 if (!preg_match("/[A-Z]/", $string))

Et vous supposeriez que le premier doit être plus rapide, car il est entièrement en PHP. Mais en réalité, l'expression régulière ne regarde la chaîne qu'une seule fois et peut annuler la condition annulée dès qu'elle trouve une lettre majuscule. L'approche strtolower () examine cependant la chaîne deux fois. Le premier strtolower () crée une chaîne en double en itérant sur chaque lettre, en la comparant et en la mettant en majuscule. Ensuite, l' ==itération sur l'original et la copie à nouveau, en les comparant une fois de plus.

Ce n'est donc pas un cas évident. Et pour être objectif, le premier est souvent plus rapide, car vous ne comparez normalement que des chaînes courtes. Mais il est impératif de ne pas aller aveuglément en supposant que les fonctions de chaîne PHP sont toujours recommandées par rapport aux expressions régulières.

(Je suis tenté d'ajouter une autre diatribe au sujet de la réponse amusante de @ bobince concernant les xhtml-regexes, et comment elle est récemment souvent liée de manière très inutile. Et les réponses plus objectives ci-dessous sont ignorées.)

mario
la source
1
Je suis d'accord avec votre exemple; dans ce cas particulier, je préférerais quand même ´strtolower () ´: dans le code non critique, même une optimisation du temps d'exécution aussi grande (par rapport à l'autre implémentation) est insignifiante - sauf si vous voulez évaluer les minuscules - ness d'un énorme fichier texte, mais je ne peux pas imaginer un cas dans lequel cela serait utile.
cbrandolino
1
@cbrandolino: Pas de discussion là-bas. Ce truc ne devrait être pertinent et évalué que pour les boucles imbriquées, où cela pourrait faire une différence factuelle.
mario
4
+1 Pour le fait que les gens les frappent toujours, bien plus qu'ils ne sont pris en charge.
Orbling
1
Comme l'un des "basgeers regexp": C'est amusant de voir un one-liner exprimer plus ou moins pour quoi la chaîne "manuelle" analyse nedds 30 lignes. Cependant, la maintenance souffre dans la plupart des exemples réalistes. De plus, lorsque vous essayez de les appliquer à une entrée non validée, la génération de diagnostics appropriés pour une entrée rejetée nécessite des acrobaties supplémentaires. Pour moi, c'est le code prototypique "écriture seule" - cool pour les scripts rapides, suce pour les applications à longue durée de vie.
peterchen
1
Quiconque n'écrit pas toutes ses expressions rationnelles en /xmode pour laisser de l'espace pour le coude de la segmentation cognitive et pour des commentaires expliquant pourquoi les choses se font, devrait bien sûr avoir les oreilles fermées. Mais pour de véritables expressions rationnelles d'une complexité raisonnable, vous devez envisager d'appliquer une conception descendante via des expressions rationnelles grammaticales . Une fois que vous aurez vu la lumière, vous n'y retournerez plus jamais /@#$^^@#$^&&*)@#/.
tchrist
8

Les expressions régulières sont très attrayantes car elles sont le meilleur outil pour analyser une langue régulière.

Ils présentent les avantages suivants:

  • Ils sont concis . Il faut généralement beaucoup plus de code pour analyser un langage régulier spécifique en utilisant un algorithme spécifique que vous avez trouvé qu'avec une expression rationnelle.
  • Ils sont rapides à utiliser. Il faut généralement beaucoup plus de temps pour écrire un analyseur pour une langue régulière spécifique en utilisant un algorithme spécifique que vous avez trouvé qu'avec une expression rationnelle.
  • Ils sont faciles . Une fois que vous avez appris l'ensemble des caractères spéciaux et leur signification, il est facile de composer une expression rationnelle (bien qu'un peu plus difficile à lire). Les regexps sont des langues elles-mêmes - un trait utile parce que notre espèce a évolué pour être très bonne en langage.
  • Ils sont rapides . Une fois compilés, ils peuvent correspondre à une longueur de chaîne Nen temps O ( N).
  • Ils sont flexibles . Ils peuvent correspondre à n'importe quelle langue régulière et beaucoup de nos données sont exprimées comme une langue régulière.
  • Ils sont omniprésents . La plupart des langages de programmation ont une prise en charge regexp de base - via des bibliothèques externes ou intégrés dans le langage lui-même. Il n'y a pas non plus trop de variations entre les langues d'expression régulière elles-mêmes.

Cela les rend attrayants pour les situations auxquelles ils sont adaptés, mais les gens peuvent les utiliser dans des contextes où ils ne sont pas le meilleur outil, car ils:

  • Je ne comprends pas que ce à quoi ils correspondent ne peut pas être exprimé à l'aide d'une expression rationnelle (par exemple HTML).
  • Sont paresseux (dans le mauvais sens) - ils connaissent un outil et reconnaissent que ce n'est pas le meilleur outil pour ce qu'ils font, mais cela fonctionnera sans problème 95% du temps et prend 95% de l'effort d'apprendre un particulier analyseur ou en écrivant un à partir de zéro.
  • Ils ignorent qu'il existe de meilleurs outils.
david4dev
la source
Euh, je faisais référence à certains cas particuliers dans lesquels ils ne sont évidemment pas la meilleure façon de procéder mais sont toujours utilisés. J'aime les regex (je veux dire, je les trouve ennuyeux et sans vie mais toujours très utiles dans certains contextes), et je connais leurs avantages.
cbrandolino
Je suis d'accord avec le reste, mais rapide et facile? La courbe d'apprentissage est abrupte: pour un débutant, il est difficile de comprendre pourquoi une expression ne fonctionne pas, et chaque implémentation d'expression rationnelle semble avoir au moins des différences subtiles, alors vous devez faire attention d'où vous essayez d'apprendre.
peterchen
Pourquoi tout le monde confond-il l'extraction de petits morceaux de HTML avec l'analyse complète d'une page Web complète dans un arbre d'analyse complet? C'est vraiment stupide. Croyez-moi, lorsque j'édite des pages HTML vi, vous pariez votre vie que j'utilise :%s/foo/bar/gcdessus. Si c'est assez bon pour un éditeur, c'est assez bon pour un script.
tchrist
6

Hmmm, je ne peux que deviner. Peut-être que certaines personnes ont expérimenté que 30 lignes de leur code ont été remplacées par une expression régulière de 20 caractères, il leur semble donc mal d'utiliser autre chose lorsque des expressions régulières peuvent être utilisées.

utilisateur281377
la source
4

Cela correspond à la façon dont certaines personnes pensent. Je ne les aime pas, mais j'ai des amis qui semblent penser aux regexps. Je suppose que la partie correspondant au motif de leur cerveau est plus exposée que la logique formelle. :-)

Lennart Regebro
la source
6
En termes de notre histoire évolutive, cela va de soi. Nous faisions correspondre des schémas bien avant de définir des grammaires ou de découvrir des syllogismes.
glenatron
1
Je ne suis pas d'accord, la programmation implique la logique et la correspondance de motifs, deux domaines. Les regexps sont très bons pour la correspondance de modèles et doivent être utilisés pour de telles tâches. Dire "je ne les aime pas", c'est jeter un bon outil pour un travail particulier.
Orbling
@Orbling: La question n'est pas de savoir si elles sont bonnes ou mauvaises, mais pourquoi certaines personnes en abusent et d'autres non.
Lennart Regebro
La question est peut-être, mais votre réponse suggère que l'un ou l'autre type d'esprit est en jeu, plutôt que les deux.
Orbling
Je ne pense pas que "suggérer" soit le bon mot.
Lennart Regebro
3

Je pense que l'omniprésence de l'expression régulière est due à l'ubiquité des chaînes. La chaîne est la structure de données la plus simple, la première que la plupart d'entre nous apprennent. Puisque tout notre code est écrit sous forme symbolique, il est naturel pour un programmeur d'envisager de modéliser quelque chose sous forme symbolique. Mais si notre langage de programmation offre une résistance lorsque nous essayons d'étendre sa syntaxe pour nos nouvelles formes symboliques intelligentes, elles se retrouvent toutes entre guillemets. Le modèle de données relationnel dispose de SQL. Le modèle de données XML a XQuery. Mais qu'en est-il du modeste modèle de données de chaîne? Regex!

Pas plus tard qu'hier, je cherchais dans l'API un nouveau cadre Javascript brillant qui prend en charge le développement de jeux HTML5. Il dispose d'un mécanisme déclaratif pour décrire les principaux sous-systèmes dont votre jeu aurait besoin. Comment spécifie-t-on ces fonctionnalités? JSON? Notation courante des points? Un tableau? Non - une chaîne contenant une liste de noms d'entités séparés par des virgules et des espaces. Je me demande comment il analyse cette liste ...?

WReach
la source
2

Parce que vous pouvez tout voir en même temps. En étant capable de voir le tout, il peut être plus facile de travailler avec, et c'est toujours agréable. C'est un peu comme la raison pour laquelle de nombreux programmeurs C ++ utilisent toujours des instructions de type printf: ce n'est pas sûr pour les types (bien que gcc puisse au moins vérifier les types sur les instructions printf), et ce n'est pas joli, mais boy est-il compact et utilisable.

Si c'est une expression assez simple, alors ils SONT souvent la meilleure façon de faire les choses - leur forme compacte et leurs nombreuses capacités les rendent parfaits pour certaines tâches. Le problème survient lorsque vous rendez la regex si compliquée que vous ne pouvez plus la lire, ou lorsque vous utilisez une regex complexe pour faire quelque chose qui pourrait être fait plus rapidement via de simples opérations de chaîne.

Regex, comme tout autre outil puissant, doit être utilisé avec modération appropriée - ni trop, ni trop peu. Et à moins que les performances ne soient un gros problème, une seule expression régulière peut parfois être plus rapide à écrire et plus facile à déboguer qu'une série d'opérations de chaîne.

Michael Kohne
la source
2

Hmm, les réponses actuelles sont trop centrées sur les aspects techniques et les avantages / inconvénients de lisibilité (ce qui est un point important). Alors permettez-moi d'essayer de le déplacer un peu plus sur l'environnement / la communauté PHP:

  • PHP est la petite- soeur de Perls . Et les expressions régulières font partie intégrante de Perl (ils ont inventé ce genre de choses, n'est-ce pas?). C'est donc une des raisons pour lesquelles les regexps sont omniprésentes en PHP.
  • Le cas d'utilisation de PHP n'est pas fortuit contrairement au cas d'utilisation des expressions régulières. PHP est structurellement utilisé pour coller ensemble des pages HTML. Et les regexps fonctionnent sur du texte. (ce que WReach a dit)
  • Micro optimisation . Comme mentionné précédemment: les gens utilisent fréquemment des expressions régulières et / ou des fonctions de chaîne PHP après la vitesse perçue. Un problème central dans les cercles PHP, non spécifique aux regexps.
  • Les expressions régulières sont construites en . En Python, en Java, en C #, en Ruby? il y a de la disponibilité, mais un élément dissuasif de devoir charger un module supplémentaire. Et voyez comment en PHP ou Javascript où c'est une fonctionnalité de base, le modèle d'utilisation diffère. Une autre exposition: CSS où il est de plus en plus utilisé.
  • Le manuel PHP est en faute. C'est souvent le cas. Les expressions régulières sont facilement détectables, et j'ai reporté ce fait amusant parce que c'est ennuyeux dans son évidence: tous les maudits tutoriels et livres d'introduction PHP enseignent toujours les expressions régulières, mais échouent à éduquer sur les cas d'utilisation.
  • L' API de chaîne en PHP a été conçu par les mêmes personnes qui vous ont amené les guillemets magiques et l'espace de noms \ séparateur. C'est englobant, meilleur que Java, mais pas glamour dans son intégralité. En particulier, si les chaînes peuvent doubler en tant qu'objets (voir Python), les fonctions de chaîne peuvent dépasser les regexps.

Mais c'est juste comme notes secondaires. Je crois que c'est de toute façon principalement des raisons de perception et techniques qui conduisent à une surutilisation et / ou à une élimination des expressions régulières en général. Pourtant, PHP et sa base d'utilisateurs ont quelques propriétés qui le composent, et pourquoi nous voyons plus de questions sur SO à ce sujet [citation nécessaire!] Et ils sont "morbidement attractifs" là-bas.

mario
la source
1

J'aime les expressions régulières en général, je les trouve plus faciles à lire / à comprendre que les 20 lignes de code avec lesquelles je devrais les remplacer. Les expressions régulières courtes sont rapidement lues et comprises et elles sont relativement faciles à maintenir (si l'expression change, vous n'avez qu'une seule ligne à changer par rapport à la recherche à travers les 20 lignes de code pour effectuer le changement). Il y a des moments où ils sont mal utilisés, mais il en est de même de bien d'autres choses.

La raison pour laquelle vous voyez probablement autant d'abus est parce que vous parcourez la section PHP de StackOverFlow car je suis sûr que vous savez qu'il y a beaucoup de programmeurs PHP immatures umm là-bas.

stoj
la source
1

Pourquoi les expressions régulières sont-elles si morbides?

Ils ne sont pas. Ils sont vraiment laids comme l'enfer. Et incompréhensible. C'est une abomination qui devrait être tuée dès que possible.

Maintenant, cela étant dit, je reviens au débogage d'une petite application Perl. Je ne peux pas m'en empêcher; malheureusement, ils sont parfois le meilleur outil pour le travail.

Rook
la source
4
J'aime dire que les expressions régulières ne sont ni "régulières" ni "expressives"
Andrew Barber
2
Ils sont moches et incompréhensibles si vous ne les comprenez pas. Une fois que vous avez atteint le zen de l'expression régulière, ils sont vraiment très élégants.
Dan Ray
1
-1 Pour avoir décidé que tous les programmeurs aiment être obscurs et ne pas avoir envisagé d'autre explication possible. ... Dire pourquoi vous pensez qu'ils sont laids ou incompréhensibles aurait aidé.
Macneil
1
@Macneil - S'il vous plaît, (bien que oui, mes réflexions vont dans ce sens), sauf si vous me citez, ne déclarez pas que j'ai dit / décidé quelque chose que je n'ai pas fait (la première partie de votre commentaire). En ce qui concerne votre question, vous les trouvez belles?! ... Je ne. Et comme il s'agit d'un site subjectif, et qui est une opinion subjective, je n'ai pas à ni envie de le développer. Je n'essaierai pas non plus d'ailleurs.
Tour
1
@Rook - Je pense que la plupart des gens regardent une expression régulière complexe, décident que toutes les expressions régulières sont laides, puis arrêtent de penser. Le fait est qu'ils sont un outil très élégant et expressif si vous pouvez exprimer vos préjugés à leur sujet. BTW, selon votre propre logique, beaucoup de programmeurs ne peuvent pas faire d'algèbre, donc l'algèbre est probablement intrinsèquement mauvaise et devrait être abolie car elle n'est clairement pas très compréhensible.
Dan Ray
0

L'homme est une créature utilisatrice d'outils, et les expressions régulières sont des outils puissants. Une belle métaphore pour les expressions régulières est une trancheuse à viande d'une charcuterie. Si vous voulez des tranches de dinde, du corned-beef, etc., comme du papier, c'est juste la chose. Cependant, vous avez besoin de mains qualifiées pour l'utiliser, car vous pouvez vous couper très mal avec lui et vous ne sentirez rien avant de voir le sang. Ce que je veux dire par là, c'est que le gros problème avec les expressions régulières est de les retirer légèrement signifie que vous faites correspondre quelque chose que vous ne devriez pas, ou vice versa, et vous ne le découvrez pas jusqu'à ce que cela cause un problème plus loin dans le processus.

Larry Coleman
la source
0

Les expressions régulières sont très attrayantes car elles détiennent du pouvoir. Vous pouvez faire un travail très compliqué en très peu de caractères.

Le problème est que la construction d'expression régulière standard est pas Turing-complet qui signifie qu'il ya des programmes que vous ne pouvez pas mettre en œuvre avec une expression régulière, et les gens ne SAIS que quand ils sont attirés par la puissance apparente des expressions régulières.

C'est - je suppose - la raison de la citation jwz de "maintenant ils ont deux problèmes".

Je suppose que les expressions régulières de Perl sont complètes de Turing, mais apparemment, cela n'a pas encore été prouvé ou réfuté de manière décisive.

user1249
la source
0

Parce que c'est un moyen efficace de programmer une machine à états finis, qui est un outil puissant lorsqu'il s'applique. C'est fondamentalement son propre langage pour programmer les FSM, ce qui est utile si vous connaissez la langue, ennuyeux si vous ne le savez pas.

DanTilkin
la source
0

Dans mon expérience, les regex sont comme un art ancien, quelque chose d'obscur, certains les ressentent parce qu'ils ne peuvent pas comprendre la sorcellerie impliquée et peut-être parce que personne ne vous les expliquera. Je n'ai pas entendu parler d'universités qui leur enseignent quelque chose de moins trivial que de faire correspondre un e-mail. Ensuite, il y a le fonctionnement interne mystique de cela, puisque la plupart des gens ne les comprennent pas, ils doivent être lents . Et les faire fonctionner correctement du premier coup est toujours un défi pour les nouveaux arrivants.

La même chose peut être dite à propos de Perl, awk, Linux et tout ce qui n'a pas de boutons brillants ou une belle syntaxe colorée. Donc, c'est comme une complexité supplémentaire pour les "tâches triviales", il suffit de lancer des boucles, des divisions, un interrupteur, de la magie et c'est tout, quelque chose qui pourrait fonctionner. Mais bon, si vous êtes de l'autre côté de la route, les regex sont de magnifiques emporte-pièces qui ressemblent à du bruit de signal sans boucles désagréables ou plus de choses à déboguer. Je les aime aussi pour la flexibilité qu'ils offrent. Lorsque le modèle pour correspondre change, vous changez simplement l'expression régulière, pas l'algorithme, ou l'outil / quoi que ce soit, et c'est agréable et fonctionne à nouveau. Et comme il s'agit d'une chaîne magique, vous pouvez la mettre en dehors du code source si vous le souhaitez. Et une autre chose qui me fait penser à Perl, si vous écrivez un regex de plus de 20 caractères, il vous semble que vous avez accompli beaucoup, au moins pour moi, c'est tellement soigné et compact. Je suis aussi un programmeur paresseux, je n'aime pas écrire beaucoup de code avec une belle identification et des commentaires et ajouter quelques bugs au mix.

alfa64
la source