Page d'accueil » comment » Comment utiliser les expressions régulières de base pour améliorer la recherche et gagner du temps

    Comment utiliser les expressions régulières de base pour améliorer la recherche et gagner du temps

    Que vous cherchiez avec Grep ou que vous recherchiez des programmes pouvant renommer par lots les fichiers, vous vous êtes probablement déjà demandé s'il existait un moyen plus simple de faire votre travail. Heureusement, il y en a, et cela s'appelle des «expressions régulières».

    (Bande dessinée de XKCD.com)

    Que sont les expressions régulières?

    Les expressions régulières sont des instructions formatées de manière très spécifique et pouvant représenter de nombreux résultats. Également appelés «regex» ou «regexp», ils sont principalement utilisés dans les fonctions de recherche et de dénomination de fichiers. Une expression régulière peut être utilisée comme une formule pour créer plusieurs sorties possibles, qui sont toutes recherchées. Vous pouvez également spécifier comment un groupe de fichiers doit être nommé en spécifiant une expression rationnelle. Votre logiciel peut alors se déplacer de manière incrémentielle vers la prochaine sortie prévue. De cette façon, vous pouvez renommer plusieurs fichiers de plusieurs dossiers très facilement et efficacement, et vous pouvez aller au-delà des limites d'un simple système de numérotation..

    Étant donné que l'utilisation d'expressions régulières repose sur une syntaxe spéciale, votre programme doit être capable de les lire et de les analyser. De nombreux programmes de changement de nom de fichiers par lots pour Windows et OS X prennent en charge les expressions rationnelles, ainsi que l'outil de recherche multiplate-forme GREP (que nous avons abordé dans notre Guide des scripts Bash pour les débutants) et l'outil de ligne de commande Awk pour * Nix. En outre, de nombreux gestionnaires de fichiers, lanceurs et outils de recherche alternatifs les utilisent et occupent une place très importante dans les langages de programmation tels que Perl et Ruby. D'autres environnements de développement tels que .NET, Java et Python, ainsi que le futur C ++ 11, fournissent tous des bibliothèques standard permettant d'utiliser des expressions régulières. Comme vous pouvez l’imaginer, ils peuvent être très utiles lorsque vous essayez de minimiser la quantité de code que vous mettez dans un programme..

    Une note sur les caractères d'échappement

    Avant de vous montrer des exemples, nous aimerions souligner quelque chose. Nous allons utiliser le shell bash et la commande grep pour vous montrer comment appliquer des expressions régulières. Le problème est que nous souhaitons parfois utiliser des caractères spéciaux devant être passés à grep, et le shell bash interprétera ce caractère car il l’utilise également. Dans ces circonstances, nous devons «échapper» à ces personnages. Cela peut devenir déroutant car cet «échappement» de caractères se produit également dans les expressions rationnelles. Par exemple, si nous voulons entrer ceci dans grep:

    \<

    nous devrons remplacer cela par:

    \\\<

    Chaque caractère spécial ici reçoit une barre oblique inverse. Vous pouvez également utiliser des guillemets simples:

    '\<'

    Les guillemets simples disent à bash de ne PAS interpréter ce qu’ils contiennent. Bien que nous ayons besoin de ces étapes afin de pouvoir les démontrer, vos programmes (en particulier ceux basés sur une interface graphique) ne requièrent souvent pas ces étapes supplémentaires. Pour que les choses restent simples et directes, l'expression régulière vous sera donnée sous forme de texte cité et vous verrez la syntaxe échappée dans les captures d'écran en ligne de commande..

    Comment se développent-ils??

    Les expressions régulières sont un moyen très concis d’énoncer des termes afin que votre ordinateur puisse les développer en plusieurs options. Jetons un coup d'oeil à l'exemple suivant:

    tom [0123456789]

    Les crochets - [et] - indiquent au moteur d’analyse que tout ce qui est à l’intérieur peut être utilisé par un caractère. Tout ce qui est entre ces crochets est appelé un jeu de caractères.

    Donc, si nous avions une longue liste d'entrées et que nous utilisions cette expression rationnelle pour chercher, les termes suivants seraient appariés:

    • à M
    • tom0
    • tom1
    • tom2
    • tom3

    etc. Cependant, la liste suivante ne serait PAS appariée et ne figurerait donc PAS dans vos résultats:

    • tomate ; la regex ne représente aucune lettre après «tom»
    • À M ; la regex est sensible à la casse!

    Vous pouvez également choisir de rechercher avec un point (.) Qui autorisera n'importe quel caractère présent, tant qu'il y a un caractère présent.

    Comme vous pouvez le voir, attraper avec

    .à M

    n'a pas évoqué des termes qui n'avaient que «tom» au début. Même les «tomates vertes» sont entrées, car l'espace avant «tom» compte comme un caractère, mais des termes comme «tomF» n'avaient pas de caractère au début et ont donc été ignorés..

    Remarque: le comportement par défaut de Grep consiste à renvoyer toute une ligne de texte lorsqu'une partie correspond à votre expression rationnelle. D'autres programmes peuvent ne pas le faire, et vous pouvez le désactiver dans grep avec l'indicateur '-o'.

    Vous pouvez également spécifier une alternance à l'aide d'un tuyau (|), comme ici:

    speciali (s | z) e

    Cela trouvera à la fois:

    • spécialiser
    • spécialiser

    Lors de l'utilisation de la commande grep, nous devons échapper les caractères spéciaux (, |, et) avec des barres obliques inverses et utiliser le drapeau '-E' pour que cela fonctionne et éviter les erreurs laides..

    Comme nous l'avons mentionné ci-dessus, c'est parce que nous devons dire au shell bash de transmettre ces caractères à grep et de ne rien faire avec eux. L'indicateur '-E' indique à grep d'utiliser les parenthèses et le pipe comme caractères spéciaux.

    Vous pouvez effectuer une recherche par exclusion en utilisant un curseur inséré entre crochets et au début d'un ensemble:

    tom [^ F | 0-9]

    Encore une fois, si vous utilisez grep et bash, n'oubliez pas d'échapper à ce tuyau!

    Les termes qui étaient dans la liste mais ne se sont pas présentés sont:

    • tom0
    • tom5
    • tom9
    • tomF

    Ceux-ci ne correspondent pas à notre regex.

    Comment utiliser les environnements?

    Souvent, nous cherchons en fonction de limites. Parfois, nous ne voulons que des chaînes qui apparaissent au début d'un mot, à la fin d'un mot ou à la fin d'une ligne de code. Ceci peut être facilement fait en utilisant ce que nous appelons des ancres.

    L'utilisation d'un curseur (en dehors des crochets) vous permet de désigner le «début» d'une ligne.

    ^ tom

    Pour rechercher la fin d'une ligne, utilisez le signe dollar.

    tom $

    Vous pouvez voir que notre chaîne de recherche vient AVANT l'ancre dans ce cas.

    Vous pouvez également pour les correspondances qui apparaissent au début ou à la fin des mots, pas des lignes entières.

    \

    tom \>

    Comme nous l'avons mentionné dans la note au début de cet article, nous devons échapper à ces caractères spéciaux car nous utilisons bash. Vous pouvez également utiliser des guillemets simples:

    Les résultats sont les mêmes. Assurez-vous que vous utilisez des guillemets simples et non des guillemets doubles.

    Autres ressources pour les expressions rationnelles avancées

    Nous avons seulement atteint la pointe de l'iceberg ici. Vous pouvez également rechercher des termes monétaires délimités par le marqueur de devise et rechercher l’un quelconque des trois termes correspondants ou plus. Les choses peuvent devenir vraiment compliquées. Si vous souhaitez en savoir plus sur les expressions régulières, consultez les sources suivantes..

    • Zytrax.com a quelques pages avec des exemples spécifiques de pourquoi les choses ne correspondent pas..
    • Regular-Expressions.info propose également un guide complet sur les éléments les plus avancés, ainsi qu'une page de référence pratique..
    • Gnu.org a une page dédiée à l'utilisation des expressions rationnelles avec grep.

    Vous pouvez également créer et tester vos expressions régulières à l'aide d'un outil en ligne gratuit basé sur Flash appelé RegExr. Cela fonctionne comme vous tapez, est gratuit et peut être utilisé dans la plupart des navigateurs.


    Avez-vous une utilisation préférée pour les expressions régulières? Connaissez-vous un grand renameur de lot qui les utilise? Peut-être que vous voulez juste vous vanter de votre grep-fu. Contribuez vos pensées en commentant!