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

11voto

Sang Huynh Points 223

Porque . Trouver un seul caractère, sauf le saut de ligne ou le terminateur de ligne.

Donc, pour faire correspondre n'importe quoi, vous pouvez utiliser comme ceci : (.|\n)*?

J'espère que cela vous aidera !

7voto

Josh Points 1919

Utilisez .* et assurez-vous d'utiliser l'équivalent de la ligne unique de votre implémentation afin d'obtenir une correspondance sur les éléments suivants fins de lignes .

Il y a une excellente explication ici -> http://www.regular-expressions.info/dot.html

5voto

Cuong Le Ngoc Points 8001

Si vous utilisez JavaScript, l'ES2018 a ajouté la fonction /s (dotAll). Avec l'indicateur /s le drapeau, le point . correspondra à n'importe quel caractère, y compris une nouvelle ligne.

console.log("line_1\nline_2".match(/.+/s))

Note : Il n'est pas encore pris en charge par tous les navigateurs.

3voto

oryxfea Points 141

(.*?) ne fonctionne pas pour moi. J'essaie de faire correspondre les commentaires entourés de /* */ qui peut contenir plusieurs lignes.

Essayez ça :

([a]|[^a])

Cette regex correspond à a o anything else expect a . Absolument, cela signifie que tout doit être assorti.

BTW, dans ma situation, /\*([a]|[^a])*/ correspond aux commentaires de style C.

Remerciez @mpen pour une manière plus concise.

[\s\S]

3voto

Panu Viljamaa Points 11

Pour JavaScript, la réponse la plus simple et la meilleure semble être la suivante /.\*/ .

Comme suggéré par d'autres /(.*?)/ fonctionnerait aussi bien, mais /.\*/ est plus simple. Le site () à l'intérieur du modèle ne sont pas nécessaires, pour autant que je puisse voir, ni la terminaison ? pour correspondre à absolument tout (y compris les chaînes vides)


NON-SOLUTIONS :

  • /[\s\S]/ ne correspond PAS aux chaînes vides, ce n'est donc pas la solution.

  • /[\s\S]\*/ DOES correspond également aux chaînes de caractères vides. Mais il y a un problème : si vous l'utilisez dans votre code, vous ne pouvez pas commenter ce code parce que la balise */ est interprété comme une fin de commentaire.

/([\s\S]\*)/ fonctionne et n'a pas le problème du commentaire. Mais elle est plus longue et plus compliquée à comprendre que /.*/ .

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