J'ai récemment appris des expressions régulières et j'adore les écrire / les utiliser. Je cherche des idées et plus d'occasions de les utiliser, mais je ne veux pas les utiliser à outrance comme un outil polyvalent, comme souvent averti par les gens.
Pour quel genre de choses dois-je utiliser des expressions régulières et où ne dois-je pas les utiliser? (En dehors de l'évidence: analyse HTML).
self-improvement
regular-expressions
Cliquez Upvote
la source
la source
if
.Réponses:
Où ils brillent, c'est là que vous avez une définition pour une chaîne qui est bien définie et simple, vous pouvez donc à la fois (a) vérifier qu'un morceau d'entrée correspond au modèle et (b) extraire toutes les parties du modèle de cette entrée, en une seule opération regex.
Par exemple, juste l'autre jour, j'avais besoin de traiter certains codes qui consistaient en deux identificateurs à une seule lettre (dont l'un avait trois options, l'autre pourrait être n'importe quel alpha), une date, puis un nombre à deux chiffres, comme celui-ci : MR_20110508_01
Une expression rationnelle simple avec 4 groupes nommés m'a permis de faire un seul appel qui à la fois vérifié qu'un code entrant était valide et m'a donné 4 groupes nommés auxquels je pouvais accéder pour retirer les 4 morceaux.
Plus la cible de l'expression rationnelle peut contenir de contenu arbitraire ou plus de règles qui dépendent d'autres parties du contenu, plus vous risquez de vous diriger vers l'enfer "maintenant vous avez deux problèmes" de Jamie Zawinski.
la source
La plupart des tâches de correspondance de chaînes peuvent bénéficier d'expressions régulières. Lorsque vous arrêtez de l'appeler correspondance et commencez à l'appeler analyse, les expressions régulières ne sont pas si utiles. Habituellement, c'est parce que les gens ont tendance à l'appeler analyse lorsqu'il s'agit d'imbrication ou d'une autre récursivité que les expressions régulières ne peuvent pas gérer.
L'endroit où je l'utilise le plus, où certaines personnes ne savent pas qu'elles sont disponibles, est probablement dans mon éditeur lors de la recherche de quelque chose. Ils n'entrent pas dans mon code aussi souvent qu'ils aident mon codage à aller plus vite.
la source
Ma réponse est négative: n'essayez pas d'écrire un analyseur (par exemple, pour HTML ) avec des expressions régulières. Vous pouvez extraire toutes sortes d'informations utiles avec eux, mais il y a certaines choses que vous ne pouvez pas faire. Je considère la compréhension des expressions rationnelles sur un pied d'égalité avec SQL, C et Python - c'est l'un des éléments constitutifs de l'informatique moderne.
la source
Je dirais qu'un signe révélateur qu'un regex ne fonctionnera pas, c'est quand vous avez besoin de quelque chose qui peut être imbriqué. Par exemple un langage de programmation (ou HTML / XML / etc.). Une fois que vous avez commencé l'imbrication, vous devez stocker l'état et utiliser une machine d'état.
De plus, si vous regardez les expressions régulières pour les e-mails ici, vous pouvez voir que les expressions régulières peuvent rapidement devenir illisibles. Parfois, même si vous pouvez utiliser des expressions régulières, l'utilisation d'une grammaire rend les choses plus claires. Même avec des expressions rationnelles plus simples, vous pouvez rapidement commencer à créer quelque chose qui est difficile à lire / à maintenir.
De plus, de nombreuses tâches ne nécessitent pas d'expression régulière. Par exemple, vous pouvez fractionner une chaîne de champs séparés par des virgules en utilisant une expression régulière, mais il est beaucoup plus simple de dire string.split (","). Généralement, une expression régulière nécessitera plusieurs étapes / recherches tandis que la division le fera en une seule instruction. De plus, pour une recherche simple, il sera plus efficace et plus clair d'utiliser une routine de recherche intégrée.
la source
Je remarque que la barre oblique entre can et should dans votre question n'en souligne pas la partie la plus importante: la différence entre les deux.
Il y a des choses qui peuvent être faites avec des expressions rationnelles qui ne devraient pas être faites avec elles. Un exemple utilise l'expression rationnelle suivante:
qui correspond aux nombres décimaux divisibles par 7 (et seulement ceux; source ).
la source
Il n'y a pas de règles strictes et rapides ici mais je dirais que toute tâche possédant un texte qui n'a pas de bibliothèque disponible est mûre pour les regex. Cela dépend également fortement du support regex de la langue que vous utilisez. Perl a un support étendu pour les expressions rationnelles tandis que java en a moins. Par conséquent, vous vous attendez à utiliser des expressions rationnelles plus en perl qu'en java.
la source