/\ATo\:\s+(.*)/
Aussi, comment faites-vous, quelle est l'approche ?
/\ATo\:\s+(.*)/
Aussi, comment faites-vous, quelle est l'approche ?
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.
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 quelconquesSi 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".
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 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.