336 votes

Expressions régulières - Tout correspond

Comment faire pour qu'une expression corresponde à absolument tout (y compris les espaces) ?
Exemple :

Regex : J'ai acheté _____ moutons.

Matches : J'ai acheté des moutons. J'ai acheté un mouton. J'ai acheté cinq moutons.

J'ai essayé d'utiliser (.*) mais ça n'a pas l'air de fonctionner.

35 votes

.* devrait fonctionner. Pouvez-vous coller votre code actuel ?

3 votes

Dans quelle langue codez-vous ?

10 votes

Un point ne correspond pas à un saut de ligne

349voto

Tim Pietzcker Points 146308

Normalement, le point correspond à n'importe quel caractère sauf les nouvelles lignes .

Donc si .* ne fonctionne pas, définissez l'option "le point correspond aussi aux nouvelles lignes" (ou utilisez la commande (?s).* ).

Si vous utilisez JavaScript, qui n'a pas d'option "dotall", essayez [\s\S]* . Cela signifie "correspond à n'importe quel nombre de caractères, qu'ils soient ou non des espaces" - en fait, "correspond à n'importe quelle chaîne".

Une autre option qui ne fonctionne que pour JavaScript (et qui n'est pas reconnue par les autres types de regex) est la suivante [^]* qui correspond également à n'importe quelle chaîne de caractères. Mais [\s\S]* semble être plus largement utilisé, peut-être parce qu'il est plus portable.

9 votes

.* ne correspond pas \n mais cela donne une chaîne qui ne contient que \n car il correspond à 0 caractère.

1 votes

Si vous utilisez Javascript, n'oubliez pas de mettre la barre oblique lorsque vous définissez une variable avec ce modèle, par exemple : var modèle = "[ \\s\\S ]*" ;

0 votes

El (?s).* ça marche pour moi, tout a été mis en correspondance, y compris la nouvelle ligne

224voto

jdixon2614 Points 2153

(.*?) correspond à n'importe quoi - je l'utilise depuis des années.

109voto

Tyler Points 1422

Choisissez et mémorisez 1 des éléments suivants !!! :)

[\s\S]*
[\w\W]*
[\d\D]*

Explication :

\s : espaces blancs \S : pas d'espaces blancs

\w : mot \W : pas de mot

\d : digit \D : pas de chiffre

(Vous pouvez échanger le * para + si vous voulez 1 ou PLUS de caractères [au lieu de 0 ou plus]).

BONUS EDIT :

Si vous voulez tout faire correspondre sur une seule ligne, vous pouvez utiliser ceci :

[^\n]+

Explication :

^ : non

\n : saut de ligne

+ : pour 1 caractère ou plus

24voto

Mike Mozhaev Points 481

Essayez ça :

I bought (.* )?sheep

ou même

I bought .*sheep

17voto

Samuel Ebert Points 302

/.*/ fonctionne parfaitement s'il n'y a pas de retour à la ligne. S'il doit correspondre à des sauts de ligne, voici quelques solutions :

Solution

Description

/.*/s

/s (dot all flag) fait . (caractère de remplacement) correspondent à tout, y compris les sauts de ligne. Ajoutez un * (astérisque), et il correspondra à tout. Lire la suite .

/[\s\S]*/

\s (métacaractère d'espacement) correspondra à tout caractère d'espacement (espace, tabulation, saut de ligne, ...), et \S (opposé à \s ) correspondra à tout ce qui est no un caractère d'espacement. * (astérisque) correspondra à toutes les occurrences du jeu de caractères (Encapsulated by [] ). Lire la suite .

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