Pourquoi y a-t-il tant de variantes d'expressions régulières? [fermé]

14

Aujourd'hui, lorsque j'ai examiné le code source de notre projet, j'ai constaté qu'il y avait beaucoup «d'espaces» et d '«onglets» inutiles situés à la fin de chaque ligne. J'ai donc décidé de les supprimer avec une expression régulière.

Cependant, j'ai trouvé que la commande sed -i '/\s+$/d'ne fonctionne pas. Jusqu'à ce que je change la commande en see -ri '/\s+$/d', elle agissait comme mon attente. D'après le manuel de sed, il dit -rinvoque une expression rationnelle étendue.

Je suis confus, pourquoi il y a tant de variantes d'expressions rationnelles? Comme vim / emacs / perl / sed regexp. Pourquoi la regexp ne peut-elle pas offrir une interface utilisateur unique?

hero2008
la source

Réponses:

19

Pour des raisons historiques. Il n'y a pas de définition unique de la syntaxe "Expression régulière". Le concept d'une expression régulière elle-même n'a rien à voir avec la syntaxe réelle qui la décrit formellement. Les gens ont trouvé différentes façons de dire la même chose, d'où différents styles de syntaxe regex.

Cependant, vous constaterez qu'il existe principalement deux groupes de définitions autour de ces jours:

  1. Expressions régulières POSIX qui spécifient les expressions régulières de base (BRE) et étendues (ERE). La confusion commence là où, par exemple, les expressions régulières de base sont utilisées\( \)pour désigner un groupe et les expressions régulières étendues sont utilisées( )pour cela.

  2. Expressions régulières basées sur Perl . Les expressions régulières Perl définissent une syntaxe plus cohérente, où par exemple une barre oblique inversée échappera toujours à un caractère non alphanumérique. La syntaxe des expressions rationnelles Perl se trouve dans de nombreux langages de programmation populaires de nos jours, de Java à Ruby.

Vous pouvez consulter l'article Wikipedia sur la syntaxe des expressions rationnelles pour plus d'informations.

slhck
la source