Introduction au didacticiel

Original: http://gnosis.cx/publish/programming/regular_expressions.html

 

Histoire de sanglot : cette page semble être assez largement lu, mais obtient tout juste parfois des dons sur les liens ci-dessus. Tragédie de la communes et tout ça… mais encore, si quelqu’un d’entre vous souhaitez faire un don d’un dollar ou deux, je l’apprécierais ? En tout cas, ce tutoriel a été publié par IBM developerWorks. Cette version contient quelques corrections mineures que les lecteurs ont laissé entendre depuis la publication originale. On trouvera une version élargie et mis à jour dans mon livre, traitement de texte en Python

 

Navigation

Ce tutoriel est juste un gros fichier HTML, avec quelques graphiques utilisés le long du chemin. Juste faire défiler vers le bas pour le lire. Impression peut casser quelques leçons au milieu–mais alors, vous ne faites pas beaucoup pour obtenir cela.

Qui est ce tutoriel pour ?
Ce didacticiel s’adresse aux utilisateurs et les programmeurs qui ont commencé à travailler avec des outils qui utilisent des expressions régulières, mais qui ne sont pas très à l’aise avec les subtilités de leur. Même les utilisateurs qui peuvent avoir utilisé les expressions régulières dans le passé, mais ont oublié certains détails peuvent bénéficier de ce recyclage.
Après avoir terminé ce didacticiel, vous serez pas encore experte en utilisant des expressions régulières pour tirer meilleur parti. Mais ce tutoriel combiné avec beaucoup de pratique avec différents cas est tout ce que vous avez besoin d’être un expert. Les concepts d’expressions régulières sont extrêmement simple et puissant... c’est leur application qui prend quelques travaux.

Tout ce qui est de toute façon une expression régulière ?
Lire le tutoriel pour obtenir la réponse longue. La réponse courte est qu’une expression régulière est un compact moyen de décrire des modèles complexes dans les textes. Vous pouvez les utiliser pour rechercher des modèles et, une fois trouvé, pour modifier les comportements de manière complexe. Ils permet également de lancer des actions programmatiques qui dépendent des modèles.
Un commentaire ironique de programmeurs est mérite réflexion: “parfois vous avez un problème de programmation et il semble que la meilleure solution est d’utiliser des expressions régulières ; maintenant vous avez deux problèmes.” Les expressions régulières sont étonnamment puissant et très expressif. C’est la raison même les écrire est juste aussi sujette que l’écriture d’un autre code de programmation complexe. Il est toujours préférable résoudre un problème réellement simple d’une manière simple ; Quand vous allez au-delà de simple, penser à des expressions régulières.

Quels outils utilisent des expressions régulières ?
Un grand nombre d’outils incorpore des expressions régulières dans le cadre de leurs fonctions. Outils de ligne de commande UNIX-orienté comme grep, sed et awk sont pour la plupart wrapper pour traitement de l’expression régulière. De nombreux éditeurs de texte permettent la recherche et/ou le remplacement, basé sur des expressions régulières. Plusieurs langages de programmation script surtout les langages tels que Perl, Python et TCL, construisent des expressions régulières dans le cœur de la langue. Même la plupart des coquilles de ligne de commande, tels que Bash ou la console de Windows permettent restreinte des expressions régulières dans le cadre de leur syntaxe de la commande.
Il y a quelques différences dans la syntaxe des expressions régulières entre les différents outils qui les utilisent. Certains outils ajouter des capacités améliorées qui ne sont pas disponibles partout. En général, pour les cas les plus simples, ce tutoriel utilise exemples basés autour de grep ou sed. Pour quelques fonctionnalités plus exotiques, on choisira des exemples Perl ou Python. Pour l’essentiel, les exemples fonctionnera partout ; mais vérifier la documentation sur votre propre outil pour des variations de syntaxe et de capacités.

Note relative à la présentation
Aux fins de présenter des exemples dans ce tutoriel, décrites les expressions régulières seront entourées par des barres obliques. Ce style de délimiter des expressions régulières est utilisé par le sed, awk, perl et autres outils. Par exemple, un exemple peut mentionner :
/ [A-Z]+(abc|xyz) * /
Lire avant de comprendre cet exemple, pour l’instant il suffit de comprendre que la réelle expression régulière est tout entre les barres obliques.
Nombreux exemples seront accompagnera d’une illustration qui montre une expression régulière et un texte mis en surbrillance pour chaque match sur cette expression.
 
Contact
 
David Mertz est un écrivain, un programmeur et un enseignant, qui s’efforce toujours d’améliorer sa communication aux lecteurs (et preneurs de tutorial). Il félicite de tout commentaire, veuillez l’adresser à < [email protected] >.

aller à partir d’ici…
Après avoir terminé ce tutoriel vous aurez vu les bases (et un peu de certains sujets avancés) d’expressions régulières. La meilleure chose à faire maintenant est de commencer à les utiliser dans des problèmes concrets. La première chose à regarder est la documentation qui accompagne l’outil particulier que vous utilisez. En outre, un certain nombre de livres imprimés ont de bonnes explications des expressions régulières, souvent en tant que mis en œuvre par des outils spécifiques. Quelques livres qu’a tiré profit du créateur de ce tutoriel sont :
  • Mastering Regular Expressions (Maîtrise des Expressions régulières,) Friedl, Jeffrey E. F., O’Reilly, Cambridge, MA 1997.
  • sed & awk (sed & awk), Dale Dougherty & Arnold Robbins, O’Reilly, Cambridge, MA 1997.
  • Programming Perl (Programmation Perl), Larry Wall, Tom Christiansen & Randal L. Schwartz, O’Reilly, Cambridge, MA 1996.
  • TCL/TK in a Nutshell (TCL/TK en quelques mots), Paul Raines & Jeff Tranter, O’Reilly, Cambridge, MA 1999.
  • Python Pocket Reference (Python de poche référenc), Mark Lutz, O’Reilly, Cambridge, MA 1998.
  • A Practical Guide to Linux (A Practical Guide to Linux), Mark G. Sobell, Addison Wesley, Reading, MA 1997.

Correspondance de schémas dans le texte : les bases

Littéraux de caractère
Screenshot 2015-04-28 21:58
Le modèle très simple, correspondant à une expression régulière est un caractère littéral ou une séquence de caractères littéraux. Rien dans le texte cible que comprend exactement ces caractères exactement l’ordre indiqué correspondra. Un caractère bas de casse n’est pas identique à sa version de haut de casse et vice versa. Par ailleurs, un espace dans une expression régulière, correspond à un espace littéral dans la cible (il s’agit contrairement à la plupart des langages de programmation ou les outils de ligne de commande, les espaces séparent Mots-clés).

« Évadés » caractères littéraux
Screenshot 2015-04-28 21:58
Un certain nombre de caractères ont une signification spéciale pour les expressions régulières. Peut être assorti un symbole avec une signification particulière, mais afin de le faire vous devez faire précéder la barre oblique (cela inclut le caractère barre oblique inverse elle-même : pour faire correspondre une barre oblique inverse dans la cible, votre expression régulière doit inclure « \\ »).

Caractères spéciaux positionnels
Screenshot 2015-04-28 21:58
Deux caractères spéciaux sont utilisés dans presque tous les outils d’expression régulière pour marquer le début et la fin d’une ligne : accent circonflexe (^) et dollarsign ($). Pour faire correspondre un signe insertion ou dollarsign comme un caractère littéral, vous devez vous échapper il (c’est-à-dire faire précéder d’une barre oblique inverse « \ »).
Une chose intéressante à propos du signe insertion et dollarsign est qu’ils correspondent à des modèles de largeur nulle. C’est la longueur de la chaîne accompagnée d’un accent circonflexe ou dollarsign par elle-même est nulle (mais le reste de l’expression régulière peut encore dépendre de la correspondance de largeur nulle). De nombreux outils d’expression régulière prévoient un autre modèle de largeur nulle limite de mot (\b). Mots pourraient être divisées par un espace comme les espaces, tabulations, sauts de ligne ou d’autres caractères comme valeurs null ; le modèle limite de mot correspond au point réel un mot commence ou termine, pas les espaces particuliers.

Le caractère « générique »
Screenshot 2015-04-28 21:58
Dans les expressions régulières, une période peut se tenir pour n’importe quel caractère. Normalement, le caractère de saut de ligne n’est pas inclus, mais la plupart des outils ont des commutateurs facultatifs pour forcer l’inclusion du caractère de saut de ligne aussi. Utilisant une période dans un modèle est un moyen d’exiger que « quelque chose » se produit ici, sans avoir à décider quoi.
Les utilisateurs qui sont familiers avec les caractères génériques de ligne de commande DOS saura le point d’interrogation comme remplissant le rôle de « certains caractères » masques de commande. Mais dans les expressions régulières, le point d’interrogation a une signification différente, et la période est utilisée comme un caractère générique.

Regroupement d’expressions régulières
Screenshot 2015-04-28 22:02
Une expression régulière peut avoir des caractères littéraux en elle et aussi patrons positionnels de largeur nulle. Chaque caractère littéral ou positionnel motif est un atome dans une expression régulière. Vous pouvez aussi regrouper plusieurs atomes dans une petite expression régulière qui fait partie d’une plus grande expression régulière. On pourrait être enclin à appeler un tel groupement une « molécule », mais normalement il est aussi appelé un atome.
Dans les anciens outils axés sur les Unix comme grep, sous-expressions doivent être regroupées avec séquence d’échappement entre parenthèses, par exemple/\(Mary\) /. En Perl et outils plus plus récents (y compris egrep), regroupement est effectué avec parenthèses nus, mais correspondant à une parenthèse littérale nécessite il s’échappant dans le modèle (l’exemple du côté suit Perl).

Classes de personnages
Screenshot 2015-04-28 22:03
Plutôt que de nom seulement un caractère unique, vous pouvez inclure un modèle dans une expression régulière qui correspond à un ensemble de caractères.
Un jeu de caractères peut être donné sous forme de liste simple à l’intérieur des crochets, par exemple / [aeiou] / correspondra une seule voyelle en minuscules. Pour la lettre ou de plages numériques vous pouvez aussi utiliser seulement la première et dernière lettre d’un éventail, avec un tiret au milieu, par exemple / [A-Ma-m] / va correspondre tout en minuscules ou en majuscules dans la première moitié de l’alphabet.
De nombreux outils d’expression régulière a également des raccourcis d’évasion-modèle le plus couramment utilisé de classe de caractères, tels que \s pour un caractère d’espace blanc et \d un chiffre. Vous pouvez toujours définir ces classes de personnages avec des crochets, mais les raccourcis peuvent faire des expressions régulières, plus compact et plus lisible.

Opérateur de complément
Screenshot 2015-04-28 22:04
Le symbole de l’accent circonflexe peut effectivement avoir deux significations différentes dans les expressions régulières. La plupart du temps, cela signifie pour correspondre au modèle de longueur nulle pour les débuts de la ligne. Mais s’il est utilisé au début d’une classe de personnage, il inverse le sens de la classe de caractères. Tout non inclus dans le jeu de caractères énumérés est mis en correspondance.

Alternance de motifs
Screenshot 2015-04-28 22:04
À l’aide de classes de personnages est une manière d’indiquer qu’une chose ou une autre chose peut se produire dans un endroit particulier. Mais que se passe-t-il si vous souhaitez spécifier qu’ou l’autre des deux sous-expressions entiers se trouvent dans une position dans l’expression régulière ? Pour cela, vous utilisez l’opérateur d’alternative, la barre verticale (« | »). C’est le symbole qui est également utilisé pour indiquer un tuyau dans les shells Unix/DOS et est parfois appelé le caractère pipe.
Le caractère pipe dans une expression régulière indique une alternance entre tout dans le groupe qui l’englobe. Ce qui veut dire que même si il y a plusieurs groupes à gauche et à droite d’un caractère de pipe, l’alternance avec avidité réclame tout sur les deux côtés. Pour sélectionner le cadre de l’alternance, vous devez définir un groupe qui comprend les modèles qui peuvent correspondre. L’exemple illustre cette situation.

Le quantificateur base abstrait
Screenshot 2015-04-28 22:05
Une des choses plus puissantes et les plus courantes, que vous pouvez le faire avec des expressions régulières est de spécifier combien de fois un atome se produit dans une expression régulière complète. Parfois vous voulez préciser quelque chose sur l’occurrence d’un caractère unique, mais très souvent, vous êtes intéressé en spécifiant l’occurrence d’une classe de caractères ou une sous-expression groupée.
Il n’y a qu’un seul quantificateur inclus avec la syntaxe de l’expression régulière « de base », l’astérisque (“*”) ; en anglais, cela a la signification « certains ou aucun » ou « zéro ou plus ». Si vous souhaitez spécifier que n’importe quel nombre d’un atome peut se produire dans le cadre d’un modèle, suivez l’atome par un astérisque.
Sans quantificateurs, les expressions de regroupement ne sert vraiment pas autant de but, mais une fois que nous pouvons ajouter un quantificateur à une sous-expression nous pouvons dire quelque chose sur l’occurrence de la sous-expression dans son ensemble. Jetez un oeil à l’exemple.
Correspondance de schémas dans le texte : intermédiaire

Correspondance de schémas dans le texte : intermédiaire

Quantificateurs plus abstraits
Screenshot 2015-04-28 22:06
D’une certaine manière, l’absence de tout symbole de quantificateur après un atome quantifie l’atome quand même : il dit que l’atome se produit exactement une fois. Des expressions régulières étendues (qui prend en charge la plupart des outils) ajouter quelques autres numéros utiles sur « une fois exactement » et « zéro ou plusieurs fois. » Le signe plus (« + ») signifie « une ou plusieurs fois » et le point d’interrogation (“?”) signifie « zéro ou une fois. » Ces quantificateurs sont de loin les énumérations plus courantes que vous liquidez naming.
Si vous pensez cela, vous pouvez voir que les expressions régulières étendues ne pas réellement vous laissent « dire » quoi que ce soit la base ceux qui ne le font pas. Ils vous permettent juste de le dire de manière plus courte et plus lisible. Par exemple, “(ABC) +” équivaut à “(ABC)(ABC) *”; et “X(ABC) ? Y”équivaut à“XABCY| XY”. Si les atomes étant quantifiée eux-mêmes compliqué est regroupés les sous-expressions, le point d’interrogation et le signe plus peuvent rendre les choses beaucoup plus courts.

Quantificateurs numériques
Screenshot 2015-04-28 22:07
En utilisant les expressions régulières étendues, vous pouvez spécifier occurrence motif arbitraire compte à l’aide d’une syntaxe plus clair que le point d’interrogation, signe plus et quantificateurs astérisque. Les accolades (“{“ et “}”) peuvent entourer un compte exact des occurrences combien vous cherchez.
La forme la plus générale de la quantification de l’accolade utilise deux arguments de la gamme (le premier doit pas être supérieur à la seconde, et les deux doivent être des entiers non négatifs). Le nombre d’occurrences est spécifié ainsi tomber entre le minimum et le maximum indiqué (inclusivement). Comme raccourci, des arguments peuvent être laissé vide : Si donc le minimum/maximum est spécifié comme zéro / infini, respectivement. Si seulement un seul argument est utilisé (avec aucune virgule là-dedans), exactement ce nombre d’occurrences est mises en correspondance.
 

Références arrières

Screenshot 2015-04-28 22:08
Une option puissante dans la création de modèles de recherche spécifie qu’une sous-expression qui s’accompagnait plus tôt dans une expression régulière correspond à nouveau plus tard dans l’expression. Nous faisons cela à l’aide des backreferences. Références arrières sont nommés par les chiffres 1 à 9, précédées du caractère barre oblique inverse ou à la fuite lorsqu’il est utilisé de cette manière. Ces références arrières se référer à chaque groupe successive dans le modèle de correspondance, comme dans /(one)(two) (trois) / \1\2\3 /. Chaque backreference numérotée désigne le groupe possédant, dans cet exemple, le mot correspondant au numéro.
Il est important de noter quelque chose que l’exemple illustre. Ce qui est accompagné d’une backreference est la même chaîne littérale mise en correspondance la première fois, même si le modèle correspondant à la chaîne pourrait ont égalé autres cordes. Répétant simplement la sous-expression groupée même plus loin dans l’expression régulière ne correspond pas les mêmes objectifs que l’utilisation d’une backreference (mais vous devez décider ce que c’est que vous voulez réellement faire correspondre dans les deux cas).
Backreferences renvoient à tout ce qui s’est produite dans les précédentes expressions groupées, dans l’ordre celles des expressions groupées s’est produite. En raison de la convention de nommage (\1-\9), de nombreux outils vous limitent à neuf backreferences. Certains outils permettent de réelles d’affectation de noms des backreferences et/ou les enregistrer aux variables de programme. Les parties plus avancées de ce tutoriel touchent sur ces sujets

Ne correspondent pas plus que vous voulez
Screenshot 2015-04-28 22:09
Quantificateurs dans les expressions régulières sont gourmands. Autrement dit, elles correspondent autant que possible.
Probablement l’erreur la plus facile à faire dans la composition des expressions régulières est d’assortir trop. Lorsque vous utilisez un quantificateur, vous souhaitez faire correspondre tout (de la bonne sorte) jusqu’au point vous voulez terminer votre match. Mais lorsque vous utilisez le “*”, « + » ou les quantificateurs numériques, il est facile d’oublier que le dernier morceau que vous cherchez peut survenir plus tard dans une ligne que celui vous intéresse.

Astuces pour retenir les correspondances
Screenshot 2015-04-28 22:09
Souvent, si vous trouvez que vos expressions régulières sont adaptent trop, une procédure utile est de reformuler le problème dans votre esprit. Plutôt que de penser à “ce que je cherche à correspondre plus loin dans l’expression?” vous poser “que dois-je éviter correspondantes dans la prochaine partie?” Cela conduit souvent à correspondances au modèle plus parcimonieux. Souvent, la façon d’éviter un motif est d’utiliser l’opérateur de complément et une classe de caractères. Regardez l’exemple et réfléchir à comment il fonctionne.
L’astuce ici est qu’il y a deux façons de formuler presque la même séquence. Vous pouvez soit pense que vous voulez garder correspondant jusqu’à ce que vous arrivez à XYZ, ou vous pouvez penser que vous voulez garder correspondant, sauf si vous arrivez à XYZ. Elles sont subtilement différentes.
Pour les personnes qui ont pensé à la probabilité de base, le même schéma se produit. La chance de rouler un 6 sur un dans un rouleau est 1/6. Quelle est la chance de rouler un 6 sur six rouleaux ? Un calcul naïf met les chances à 1 / 6 + 1 / 6 + 1 / 6 + 1 / 6 + 1 / 6 + 1/6 ou 100 %. C’est faux, bien sûr (après tout, la chance après douze rouleaux n’est pas à 200 %). Le calcul correct est « comment éviter un 6 pour six roulettes de roulement? »soit 5/6 * 5/6 * 5/6 * 5/6 * 5/6 * 5/6, soit environ 33 %. Les chances d’obtenir un 6 sont les mêmes chances que n’évite ne pas il (soit environ 66 %). En fait, si vous imaginez transcrire une série de dés des rouleaux, vous pourriez appliquer une expression régulière à la trace écrite et pensée semblable s’applique.

Commentaires sur les outils de modification
Pas tous les outils qui utilisent des expressions régulières vous permettent de modifier les chaînes de la cible. Recherchez simplement le modèle correspondant ; l’outil d’expression régulière pour la plupart largement utilisé est probablement grep, qui est un outil pour la recherche uniquement. Éditeurs de texte, par exemple, peuvent ou ne permettent pas de remplacement dans leur fonction de recherche d’expression régulière. Comme toujours, consultez la documentation sur votre outil individuel.
Des outils qui vous permettent de modifier le texte cible, il y a quelques différences de garder à l’esprit. La façon dont vous spécifiez effectivement remplacements variera entre outils : un éditeur de texte peut avoir une boîte de dialogue ; outils de ligne de commande vont utiliser des délimiteurs entre la correspondance et du remplacement, langages de programmation appellerez en fonctions avec arguments pour les modèles de correspondance et du remplacement.
Une autre différence importante à garder à l’esprit, c’est de ce qui est se modifié. Les outils de ligne de commande UNIX typiquement utilisent STDOUT et tuyaux pour les modifications aux tampons, plutôt que de modifier les fichiers en place. À l’aide d’une commande de sed, par exemple, va écrire les modifications dans la console, mais ne changera pas le fichier original de la cible. Éditeurs de texte ou de langages de programmation sont plus susceptibles de modifier en fait une fichier en place.

Une note sur des exemples de modification
Dans le cadre de ce didacticiel, les exemples continuera d’utiliser les délimiteurs de barre oblique de style sed. Plus précisément, les exemples indiquera la commande de substitution et le modificateur global, comme avec « s/ce/que/g ». Cette expression signifie: « remplacer la chaîne « this » avec la chaîne « qui » partout dans le texte cible.
Exemples comprendra une ligne de sortie, une entrée ligne et la commande de modification. La ligne de sortie aura tout changement a souligné. En outre, chaque ligne d’entrée/sortie sera précédé d’un moins-à ou supérieur-que symbole pour aider à distinguer les (l’ordre sera tel que décrit également), qui suggère des symboles de redirection dans les shells Unix.

Un exemple de modification de littéral de chaîne
Screenshot 2015-04-28 22:10
Prenons un oeil à quelques exemples de modification qui s’appuient sur ce que nous avons déjà couvert. Celui-ci remplace simplement un texte littéral pour un autre texte littéral. La capacité de recherche et de remplacement des nombreux outils peut faire autant, même sans l’aide d’expressions régulières.
Un exemple de modification de modèle-match
Un exemple de modification de modèle-match
Screenshot 2015-04-28 22:11
La plupart du temps, si vous utilisez des expressions régulières pour modifier un texte cible, vous voudrez correspondent à des modèles plus généraux que les chaînes littérales juste. Tout ce qui est mis en correspondance, c’est ce qui est remplacé (même si c’est plusieurs chaînes différentes dans la cible)

Modification à l’aide des références arrières
Screenshot 2015-04-28 22:12
Il est agréable d’être en mesure d’insérer une chaîne fixe partout qu’un modèle se trouve dans un texte cible. Mais franchement, cela n’est pas très sensible au contexte. Beaucoup de fois, nous ne voulons pas juste d’insérer les chaînes fixes, mais plutôt d’insérer quelque chose qui a rapport beaucoup plus avec les modèles assortis. Heureusement, les backreferences venir à notre secours ici. Vous pouvez utiliser les références arrières dans les correspondances au modèle-eux-mêmes, mais il est encore plus utile d’être capable de les utiliser dans des modèles de remplacement. En utilisant des références arrières de remplacement, vous pouvez choisir des schémas assortis d’utiliser seulement les parties qui que vous intéressent.
Pour faciliter la lisibilité, sous-expressions seront groupées avec des parenthèses nus (comme Perl), plutôt qu’avec échappé entre parenthèses (comme avec sed).

Un autre avertissement sur désadaptation
Ce tutoriel a déjà mis en garde contre le danger des correspondants trop avec vos modèles d’expressions régulières. Mais le danger est beaucoup plus grave lorsque vous effectuez des modifications, il convient de rappeler. Si vous remplacez un modèle qui correspond à une plus grande chaîne que vous avez pensé de quand vous avez composé le modèle, vous avez potentiellement supprimé certaines données importantes de votre cible.
C’est toujours une bonne idée d’essayer vos expressions régulières sur des données de cible diverse qui soit représentative de l’utilisation de votre production. Assurez-vous que vous rapprochez ce que vous pensez que vous rapprochez. Un quantificateur errant ou caractère générique peut faire une grande variété de textes correspondent à ce que vous pensiez, c’était un modèle spécifique. Et parfois vous avez juste à regarder votre patron pendant un certain temps, ou trouver une autre série d’yeux, de comprendre ce qui se passe vraiment même après avoir vu ce qui correspond à. Familiarité pourrait se reproduire au mépris, mais il inspire également la compétence.

Avancée des expressions régulières Extensions

Sur les fonctionnalités avancées
Quelques améliorations très utiles sont incluses dans certains outils de l’expression régulière. Ces améliorations font souvent la composition et l’entretien de l’expression régulière considérablement plus facile. Mais vérifiez avec votre propre outil pour voir ce qui est pris en charge.
Le langage de programmation Perl est probablement l’outil plus sophistiqué pour le traitement de l’expression régulière, qui explique en grande partie de sa popularité. Les exemples illustrés utilise Perl-ish code pour expliquer des concepts. Autres langages de programmation, notamment autres langages de script comme Python, ont une gamme semblable des améliorations. Mais à titre d’exemple, la syntaxe de Perl reflète plus étroitement les outils expression régulière, qu’il s’inspire, comme ed, ex, grep, sed et awk.

Quantificateurs non gourmands
Screenshot 2015-04-28 22:12
Plus tôt dans le didacticiel, les problèmes de correspondance trop ont été étudiés, et des solutions de contournement ont été suggérées. Certains outils d’expression régulière sont assez gentil pour vous faciliter la tâche en fournissant les quantificateurs non gourmand en option. Ces encavateur de quantificateur aussi peu que possible tout en correspondant toujours à tout ce qui vient après dans le motif (au lieu d’autant que possible).
Les quantificateurs non gourmands ont la même syntaxe qu’ordinaires avares, sauf avec le quantificateur suivi d’un point d’interrogation. Par exemple, peut ressembler à un modèle non gourmand: “/A [A-Z] * ? B / “. En anglais, cela signifie « correspond à un A, puis seulement comme beaucoup de majuscules comme sont nécessaires pour trouver un B. »
Une petite chose à surveiller est le fait que le modèle “/ [A-Z] *?. / “correspondra toujours à zéro lettres capitales. Si vous utilisez des quantificateurs non gourmande, faites attention aux correspondants trop peu, qui est un danger symétrique.

Modificateurs de correspondance au modèle
Screenshot 2015-04-28 22:13
Nous avons déjà vu un seul modificateur de correspondance au modèle dans les exemples de modifications : le modificateur global. En effet, de nombreux outils d’expression régulière, nous devrions utilisent le modificateur « g » pour tous nos modèle correspond à. Sans le « g », de nombreux outils correspondra uniquement la première occurrence d’un motif sur une ligne dans la cible. C’est donc un modificateur utile (mais pas celui que vous souhaitez nécessairement utiliser toujours). Penchons-nous sur d’autres.
Comme un peu mnémonique, c’est agréable de se rappeler le mot « Léo » (il semble même en quelque sorte approprié). Les modificateurs plus fréquents sont :
  • g match à l’échelle mondiale
  • i match insensible à la casse
  • s traiter la chaîne comme seule ligne
  • m traiter la chaîne sous forme de lignes multiples
  • o seulement compilation motif une fois
L’option o est une optimisation de la mise en œuvre et pas vraiment une question d’expression régulière (mais il aide le mnémonique). L’option de ligne individuelle permet le caractère générique faire correspondre un caractère de saut de ligne (il ne sera pas dans le cas contraire). Les causes de l’option multiligne “^” et « $» pour faire correspondre le début et la fin de chaque ligne dans la cible, non seulement le begin/end de la cible dans son ensemble (avec sed ou grep, c’est la valeur par défaut). L’option insensible ne tient pas compte des différences entre la casse des lettres.

Changer le comportement des backreferences
Screenshot 2015-04-28 22:14
Backreferencing dans les modèles de remplacement est très puissant ; mais il est également facile à utiliser, plus de neuf groupes dans une expression régulière complexe. Indépendamment en utilisant les noms de backreference disponibles, il est souvent plus lisibles pour désigner les parties d’un modèle de remplacement dans un ordre séquentiel. Pour gérer ce problème, certains outils d’expression régulière permettent de « groupement “sans backreferencing. »
Un groupe qui ne devrait pas aussi être traité comme une reference a un point d’interrogation du côlon au début du groupe, comme dans “(?:pattern). » En fait, vous pouvez utiliser cette syntaxe, même lorsque vos références arrières sont dans le modèle de recherche elle-même.

Nommage des références arrières
Screenshot 2015-04-28 22:14
Le langage Python propose une syntaxe particulièrement pratique pour les backreferences patron vraiment complexe. Plutôt que de simplement jouer avec la numérotation des groupes appariés, vous pouvez leur donner un nom.
La syntaxe de l’utilisation des expressions régulières en Python est un style de fonction/méthode language de programmation standard d’appel, plutôt que de type Perl ou sed délimiteurs de barre oblique. Vérifiez votre propre outil pour voir si elle prend en charge cette installation.

Assertions de préanalyse
Screenshot 2015-04-28 22:15
Un autre truc des outils avancés d’expression régulière est « les assertions de préanalyse. » Elles sont semblables aux sous-expression groupée ordinaire, sauf qu’ils ne prenez pas réellement ce qu’ils correspondent. Il y a deux avantages à utiliser les assertions lookahead. D’une part, une assertion de préanalyse peut fonctionner d’une manière similaire à un groupe qui n’est pas backreferenced ; autrement dit, vous pouvez associer quelque chose sans compter il dans backreferences. Plus significatif, toutefois, une assertion de préanalyse peut spécifier que le segment suivant d’un modèle a une certaine forme, mais laissez une sous-expression différente en fait saisir (habituellement à des fins de backreferencing autre cette sous-expression.
Il existe deux types d’assertions lookahead : positifs et négatifs. Comme vous vous en doutez, une affirmation positive indique que quelque chose ne vient-elle pas prochaine, et négative indique que quelque chose ne vient pas prochaine. Mettant l’accent sur leurs liens avec des groupes de non-backreferenced, la syntaxe pour les assertions lookahead est similaire: (? = modèle) pour les affirmations positives et (? ! modèle) pour les affirmations négatives.

Expressions régulières de fabrication plus lisibles
Screenshot 2015-04-28 22:16
Dans les exemples plus tard, nous avons commencé à voir à quel point compliqué d’expressions régulières peuvent obtenir. Ces exemples ne sont pas la moitié de celui-ci. Il est possible de faire des choses presque ridiculement difficile à comprendre avec expression régulière (mais qui sont néanmoins utiles).
Il existe deux installations de base que certains des outils d’expression régulière plus avancés utilisent pour clarifier les expressions. On permet à des expressions régulières continuer sur plusieurs lignes (en ignorant les espaces blancs tels que les espaces et retours à la ligne). Le second autorise les commentaires dans les expressions régulières. Certains outils vous permettent de faire un ou l’autre de ces choses seul, mais quand les choses se compliquent, faire les deux !
L’exemple donné des utilisations Perl étendre modificateur pour permettre a commenté multilignes des expressions régulières. Consultez la documentation de votre propre outil pour plus de détails sur la façon de composer ces.

Comments are closed.