4 votes

Que signifie cette expression régulière ?

/\ATo\:\s+(.*)/

Aussi, comment faites-vous, quelle est l'approche ?

4voto

paxdiablo Points 341644

Dans les expressions régulières multi-lignes, \A correspond au début de la chaîne (et \Z est la fin de la chaîne, tandis que ^ / $ correspond au début/fin de la chaîne ou au début/fin d'une ligne). Dans les variantes à ligne unique, vous utilisez simplement ^ y $ pour le début et la fin de la chaîne/ligne puisqu'il n'y a pas de distinction.

To est littéral, \: est un échappé : .

\s signifie espace blanc et le + signifie un ou plusieurs des "caractères" précédents (espace blanc dans ce cas).

() est un groupe de capture, ce qui signifie que tout ce qui s'y trouve sera stocké dans un "registre" que vous pourrez utiliser. C'est donc la viande qui sera extraite.

.* signifie simplement tout caractère autre qu'une nouvelle ligne . , zéro ou plusieurs fois * .

Donc, ce que cette regex va faire est de traiter une chaîne comme :

To: paxdiablo
Re: you are so cool!

et retourner le texte paxdiablo .

Pour ce qui est de la manière d'apprendre à résoudre ce problème soi-même, le Tutoriel Perl sur les expressions rationnelles (a) est un bon début, et puis pratiquez, pratiquez, pratiquez :-)


(a) Vous n'avez pas précisé quelle implémentation de regex vous utilisez, mais la plupart des implémentations modernes sont très similaires à Perl. Si vous pouvez trouver un tutoriel spécifique pour votre version particulière, ce serait évidemment mieux.

2voto

Linus Kleen Points 15925

\A est une assertion de largeur nulle et signifie "Correspondance uniquement au début de la chaîne".

La regex se lit : Sur une ligne commençant par "To :" suivi d'un ou plusieurs espaces ( \s ), capturer le reste de la ligne ( (.*) ).

1voto

carlpett Points 4883

Tout d'abord, vous devez savoir ce que sont les différents classes de caractères et les quantificateurs sont. Les classes de caractères sont les caractères préfixés par un antislash, \A de votre regex, par exemple. Les quantificateurs sont par exemple les + . Il existe plusieurs références sur internet, par exemple celui-ci .

En utilisant cela, nous pouvons voir ce qui se passe en allant de gauche à droite :

  • \A correspond à un début de chaîne.
  • To correspond au texte "À" littéralement
  • \: échappe le " :", il perd donc sa signification particulière et devient "juste un deux-points".
  • \s correspond aux espaces blancs (espace, tabulation, etc.)
  • + signifie correspondre à la classe précédente une ou plusieurs fois, donc \s+ signifie un ou plusieurs espaces
  • () est un groupe de capture, tout ce qui correspond à l'intérieur des parenthèses est enregistré pour une utilisation ultérieure.
  • . signifie "tout caractère".
  • * est comme le + mais zéro fois ou plus, donc .* signifie un nombre quelconque de caractères quelconques

Si l'on considère l'ensemble de ces éléments, la regex correspondra à une chaîne commençant par "To :", suivie d'au moins un espace, et de n'importe quoi, qu'elle enregistrera. Ainsi, avec la chaîne "To : JaneKealum", vous pourrez extraire "JaneKealum".

0voto

Il correspond To: au début de l'entrée, suivi d'au moins un espace, puis d'un nombre quelconque de caractères groupés.

0voto

progo Points 6247

Vous commencez par la gauche et vous cherchez les échappés (c'est à dire \A ) personnages. Les autres sont des caractères normaux. \A signifie le début de l'entrée. Donc To: doivent être appariés au tout début de l'entrée. Je pense que le : s'échappe pour rien. \s est un groupe de caractères pour tous les espaces (tabulations, espaces, éventuellement nouvelles lignes) et le groupe + qui le suit signifie que vous devez avoir un ou plusieurs caractères d'espacement. Ensuite, vous capturez tout le reste de la ligne dans un groupe (marqué par le symbole ( ) ).

Si l'entrée était

To:   progo@home

le groupe de capture contiendrait "progo@home"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X