Regular Expressions
Lorsque vous ne devez PAS utiliser les expressions régulières
Recherche…
Remarques
Les expressions régulières étant limitées à une grammaire régulière ou à une grammaire sans contexte, il existe de nombreuses utilisations abusives des expressions régulières. Donc, dans cette rubrique, il y a quelques exemples où vous ne devriez PAS utiliser des expressions régulières, mais plutôt utiliser votre langue préférée.
Certaines personnes, confrontées à un problème, pensent:
"Je sais, je vais utiliser des expressions régulières."
Maintenant, ils ont deux problèmes.
- Jamie Zawinski
Les paires correspondantes (comme les parenthèses, les parenthèses…)
Certains moteurs de regex (tels que .NET) peuvent gérer des expressions sans contexte, et vont les résoudre. Mais ce n'est pas le cas pour la plupart des moteurs standard. Et même s'ils le font, vous finirez par avoir une expression complexe difficile à lire, tandis que l'utilisation d'une bibliothèque d'analyse syntaxique pourrait vous faciliter la tâche.
Opérations de chaîne simples
Les expressions régulières pouvant faire beaucoup, il est tentant de les utiliser pour les opérations les plus simples. Mais utiliser un moteur de regex a un coût en mémoire et en utilisation de processeur: vous devez compiler l'expression, stocker l'automate en mémoire, l'initialiser puis le nourrir avec la chaîne pour l'exécuter.
Et il y a beaucoup de cas où il n'est tout simplement pas nécessaire de l'utiliser! Quelle que soit votre langue de prédilection, elle dispose toujours des outils de manipulation de chaînes de base. Donc, en règle générale, lorsqu'un outil permet d'effectuer une action dans votre bibliothèque standard, utilisez cet outil, et non une expression régulière:
- fendre une corde?
Par exemple, l'extrait suivant fonctionne en Python, Ruby et Javascript:
'foo.bar'.split('.')
Ce qui est plus facile à lire et à comprendre, et beaucoup plus efficace que l'expression régulière (en quelque sorte) équivalente:
(\w+)\.(\w+)
- Supprimer les espaces de fin?
La même chose s'applique aux espaces de fuite!
'foobar '.strip() # python or ruby
'foobar '.trim() // javascript
Ce qui serait équivalent à l'expression suivante:
([^\n]*)\s*$ # keeping \1 in the substitution
Analyse HTML (ou XML, JSON ou C, ou…)
Si vous souhaitez extraire quelque chose d'une page Web (ou de tout langage de représentation / programmation), une regex est le mauvais outil pour la tâche. Vous devriez plutôt utiliser les bibliothèques de votre langue pour accomplir la tâche.
Si vous voulez lire du code HTML, XML ou JSON, utilisez simplement la bibliothèque qui l’analyse correctement et l’utilise comme objet utilisable dans votre langue préférée! Vous vous retrouverez avec du code lisible et plus maintenable, et vous ne vous retrouverez pas
- RegEx correspondent à des balises ouvertes à l'exception des balises autonomes XHTML
- Analyse Python HTML à l'aide d'expressions régulières
- existe-t-il une regex pour générer tous les entiers pour un certain langage de programmation